diff --git a/ReadMe.md b/ReadMe.md
index ba3dfd0..e305fd5 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -17,25 +17,43 @@ Zorg dat je in de hoofdmap "GoodGarden" zit. Kijk in je path: "../GoodGarden". A
npm install express
npm install body-parser
npm install python-shell
+
npm install --save-dev npm-run-all
npm install wait-on --save-dev
npm install concurrently --save-dev
+
pip install mysql-connector-python
pip install requests
pip install flask-cors
-
+ pip install Flask-SQLAlchemy
## Gebruik
-Een paar voorbeelden van nuttig gebruik van dit project of hoe het gebruikt kan worden.
+- De data wordt gefetched via MQTT, waarnaar het in topics wordt verdeeld en dan kan je met een script op he gewenste onderwerp "subscriben".
+
+- Op het Dashboard worden de planten getoond die aanwezig zijn in de database. Je kan doormiddel een modal de planten invullen die je getoond wilt hebben op het Dashboard. Voor nu moet je dan even het "planten.py" script handmatig uitvoeren. Ook worden de 2 sensoren getoond op het Dashboard en hebben we voor nu een "placeholder" neergezet voor de pomp.
+
+- Als je op een plant klikt ga je naar de pagina van de plant toe. Die is dynamisch gemaakt, alleen nog niet helemaal ingevuld met data. Er zit een switch-knop in waarmee je kan aangeven of de plant aanwezig is in de kas of niet, ook die werkt helaas niet helemaal naar behoren.
+
+- Je kan ook op de sensoren klikken die op de homepage staan. Dan ga je door naar de pagina van die desbetreffende sensor. De bedoeling was om hier alle errors en waardes te tonen de we doorkrijgen van de sensoren.
+
+- Als laatste hebben we een grafiek toegevoegd aan het project die laat zien wat de temperatuur is voor de aankomende 5 dagen. De bedoeling was om voor elke plant een unieke grafiek te maken waar dan data in getoond zou worden.
## Versiebeheer
-We gebruiken [SemVer](http://semver.org/) voor versiebeheer. Voor de beschikbare versies, zie de [tags op deze repository](https://example.com/tags).
+We gebruiken [Github](https://github.com) voor versiebeheer. Voor de beschikbare versies, zie de [GoodGarden](https://github.com/6028570/GoodGarden).
+
+De branch "oomen" is up to date. Het mergen ging niet helemaal goed dus we hebben het niet met "main" gemerged.
## Auteurs
-* **Jouw Naam** - *Initieel werk* - [Gebruikersnaam](https://example.com/)
+* **Atilla Oomen** - *Projectleider | Programmeur* - [Znooptokkie](https://github.com/Znooptokkie)
-Zie ook de lijst van [bijdragers](https://example.com/contributors) die hebben bijgedragen aan dit project.
+* **Mohammed Çifçi** - *Back end Programmeur* - [6028570](https://github.com/6028570)
+
+* **Burak Diker** - *Back end Programmeur* - [6028083](https://github.com/6028083)
+
+* **Justin Doekhi** - *Front end Programmeur* - [6027529](https://github.com/6027529)
+
+* **Atilla Oomen** - *Front end Programmeur* - [6025850](https://github.com/6025850)
\ No newline at end of file
diff --git a/app.py b/app.py
index 650e5fc..1f66a27 100644
--- a/app.py
+++ b/app.py
@@ -1,4 +1,5 @@
-from flask import Flask, jsonify
+from flask import Flask, render_template, jsonify, request, redirect, url_for
+from flask_sqlalchemy import SQLAlchemy
import mysql.connector
import requests
@@ -19,7 +20,6 @@ def database_connect():
print("Database connection failed:", e)
return None
-
# Function to get data from the MySQL database
def get_database_data():
@@ -44,10 +44,8 @@ def get_data():
return jsonify({"error": "Failed to fetch data from database"})
-
return jsonify(battery_data) # Directly return the list of dictionaries as JSON
-
def get_weather_data():
api_key = "05ddd06644"
location = "Leiden"
@@ -74,7 +72,6 @@ def get_weather():
return jsonify(weather_data)
-
def get_planten_data():
mydb = database_connect()
if mydb and mydb.is_connected():
@@ -86,18 +83,6 @@ def get_planten_data():
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
new file mode 100644
index 0000000..54ff090
--- /dev/null
+++ b/goodgarden.sql
@@ -0,0 +1,417 @@
+-- phpMyAdmin SQL Dump
+-- version 5.2.1
+-- https://www.phpmyadmin.net/
+--
+-- Host: 127.0.0.1
+-- Gegenereerd op: 09 apr 2024 om 21:22
+-- Serverversie: 10.4.32-MariaDB
+-- PHP-versie: 8.2.12
+
+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`
+--
+
+-- --------------------------------------------------------
+
+DROP DATABASE IF EXISTS goodgarden;
+CREATE DATABASE goodgarden;
+
+USE 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 `care_schedules`
+--
+
+CREATE TABLE `care_schedules` (
+ `plant_id` int(10) UNSIGNED NOT NULL,
+ `water` int(11) DEFAULT NULL,
+ `bemesting` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+--
+-- Gegevens worden geëxporteerd voor tabel `care_schedules`
+--
+
+INSERT INTO `care_schedules` (`plant_id`, `water`, `bemesting`) VALUES
+(1, 2, 15),
+(2, 3, 10),
+(3, 2, 10),
+(4, 2, 15),
+(5, 2, 15),
+(6, 3, 15),
+(7, 3, 10),
+(8, 2, 15),
+(9, 2, 10),
+(10, 2, 10),
+(11, 2, 15),
+(12, 3, 15),
+(13, 2, 10),
+(14, 3, 15),
+(15, 2, 10);
+
+-- --------------------------------------------------------
+
+--
+-- 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,
+ `device_id` int(10) 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`, `device_id`) VALUES
+(15, '0033889B1BAB1169', 'firefly2_0051', 'The Field', 1712297000, 3.92796, 256),
+(16, '006FE1FC316ED7D8', 'firefly2_0111', 'The Field', 1712297257, 4.07448, 322);
+
+-- --------------------------------------------------------
+
+--
+-- 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(11) NOT NULL,
+ `plant_naam` varchar(50) DEFAULT NULL,
+ `plantensoort` varchar(50) NOT NULL,
+ `plant_geteelt` tinyint(1) NOT 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
+(1, 'Tomatenplant', 'Groente', 1),
+
+-- --------------------------------------------------------
+
+--
+-- Tabelstructuur voor tabel `plants`
+--
+
+CREATE TABLE `plants` (
+ `id` int(10) UNSIGNED NOT NULL,
+ `name` varchar(255) DEFAULT NULL,
+ `type` varchar(255) DEFAULT NULL,
+ `beschrijving` text DEFAULT NULL,
+ `licht` varchar(50) DEFAULT NULL,
+ `vochtigheid` varchar(50) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+--
+-- Gegevens worden geëxporteerd voor tabel `plants`
+--
+
+INSERT INTO `plants` (`id`, `name`, `type`, `beschrijving`, `licht`, `vochtigheid`) VALUES
+(1, 'Tomaat', 'Groente', 'Tomaat (Solanum lycopersicum) is een veelgeteelde groenteplant in de nachtschadefamilie.', 'Volle Zon', '70'),
+(2, 'Sla', 'Groente', 'Sla (Lactuca sativa) is een bladgroente die vaak wordt gebruikt in salades.', 'Gedeeltelijke Schaduw', '80'),
+(3, 'Wortel', 'Groente', 'Wortel (Daucus carota) is een wortelgroente meestal oranje van kleur.', 'Volle Zon', '60'),
+(4, 'Komkommer', 'Groente', 'Komkommer (Cucumis sativus) is een veel gekweekte kruipende wijnplant in de familie Cucurbitaceae.', 'Volle Zon', '65'),
+(5, 'Aardappel', 'Groente', 'Aardappel (Solanum tuberosum) is een zetmeelhoudend knolgewas van de vaste plant Solanum tuberosum.', 'Gedeeltelijke Schaduw', '75'),
+(6, 'Courgette', 'Groente', 'Courgette (Cucurbita pepo) is een zomerpompoen die bijna een meter lang kan worden, maar meestal onrijp wordt geoogst op 15 tot 25 cm.', 'Volle Zon', '70'),
+(7, 'Spinazie', 'Groente', 'Spinazie (Spinacia oleracea) is een bladgroente afkomstig uit Centraal- en West-Azië.', 'Gedeeltelijke Schaduw', '70'),
+(8, 'Paprika', 'Groente', 'Paprika (Capsicum annuum) is een fruit- en groenteplant gekweekt om zijn vruchten.', 'Volle Zon', '80'),
+(9, 'Ui', 'Groente', 'Ui (Allium cepa) is een groente die de meest geteelde soort is van het geslacht Allium.', 'Volle Zon', '50'),
+(10, 'Radijs', 'Groente', 'Radijs (Raphanus raphanistrum subsp. sativus) is een eetbare wortelgroente.', 'Volle Zon', '70'),
+(11, 'Groene Boon', 'Groente', 'Groene bonen zijn de onrijpe, jonge vruchten en beschermende peulen van verschillende cultivars van de gewone boon.', 'Volle Zon', '75'),
+(12, 'Broccoli', 'Groente', 'Broccoli (Brassica oleracea var. italica) is een koelgewas dat in het voorjaar of de herfst kan worden gekweekt.', 'Volle Zon', '75'),
+(13, 'Kool', 'Groente', 'Kool (Brassica oleracea of varianten) is een bladgroente, rood of wit, een tweejarige plant die wordt geteeld als eenjarige groente.', 'Gedeeltelijke Schaduw', '80'),
+(14, 'Aubergine', 'Groente', 'Aubergine (Solanum melongena) is een soort in de nachtschadefamilie die wordt gekweekt om zijn eetbare vruchten.', 'Volle Zon', '85'),
+(15, 'Boerenkool', 'Groente', 'Boerenkool of bladkool (Brassica oleracea var. acephala) is een groenteplant met groene of paarse bladeren.', 'Gedeeltelijke Schaduw', '70');
+
+-- --------------------------------------------------------
+
+--
+-- 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 `care_schedules`
+--
+ALTER TABLE `care_schedules`
+ ADD PRIMARY KEY (`plant_id`);
+
+--
+-- 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`);
+
+--
+-- Indexen voor tabel `plants`
+--
+ALTER TABLE `plants`
+ ADD PRIMARY KEY (`id`);
+
+--
+-- 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=21;
+
+--
+-- 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(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
+
+--
+-- AUTO_INCREMENT voor een tabel `plants`
+--
+ALTER TABLE `plants`
+ MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;
+
+--
+-- 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;
+
+--
+-- Beperkingen voor geëxporteerde tabellen
+--
+
+--
+-- Beperkingen voor tabel `care_schedules`
+--
+ALTER TABLE `care_schedules`
+ ADD CONSTRAINT `fk_plant_id` FOREIGN KEY (`plant_id`) REFERENCES `plants` (`id`);
+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/instance/schakelaar.db b/instance/schakelaar.db
new file mode 100644
index 0000000..e69de29
diff --git a/mqtt/publisher.py b/mqtt/publisher.py
index 6cbf0a7..3760cb0 100644
--- a/mqtt/publisher.py
+++ b/mqtt/publisher.py
@@ -7,7 +7,7 @@ import json
from mqtt_client import create_client, start_loop
# Stel het interval in seconden in voor het periodiek ophalen en publiceren van data.
-publish_interval = 30 # MOET ~300 ZIJN voor productiegebruik.
+publish_interval = 900 # MOET ~900 ZIJN voor productiegebruik. -- 15min
# Definieer API-eindpunten en de corresponderende MQTT topics.
api_endpoints = [
@@ -30,7 +30,7 @@ def on_connect(client, userdata, flags, rc):
flags: Reactie vlaggen van de broker.
rc: De connectie resultaat code.
"""
- print("Connected with result code "+str(rc))
+ print("Geconnect met code "+str(rc))
def on_message(client, userdata, msg):
"""
@@ -56,7 +56,7 @@ def publish_to_mqtt(topic, data):
"""
json_data = json.dumps(data) # Serialiseer de data naar een JSON-string.
client.publish(topic, json_data)
- print(f"\033[92mData published to MQTT topic {topic}.\033[0m")
+ print(f"\033[92mData gepubliceerd naar MQTT topic {topic}.\033[0m")
def fetch_and_publish_data():
"""
@@ -72,10 +72,10 @@ def fetch_and_publish_data():
response = requests.get(url, headers=headers)
response.raise_for_status() # Verifieert respons status.
data = response.json()
- print(f"Data from {url}: {data}")
+ print(f"Data van {url}: {data}")
publish_to_mqtt(mqtt_topic, data)
except requests.exceptions.RequestException as e:
- print(f"Error fetching data from {url}: {e}")
+ print(f"Error met data ophalen {url}: {e}")
if __name__ == "__main__":
client.loop_start() # Start de niet-blokkerende MQTT-client loop.
diff --git a/plants.json b/plants.json
deleted file mode 100644
index d5d1df0..0000000
--- a/plants.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
- {
- "id": 47,
- "plant_naam": "Tomaten",
- "plantensoort": "Groente",
- "plant_geteelt": 1
- },
- {
- "id": 49,
- "plant_naam": "Komkommer",
- "plantensoort": "Groente",
- "plant_geteelt": 1
- },
- {
- "id": 50,
- "plant_naam": "Appel",
- "plantensoort": "Fruit",
- "plant_geteelt": 1
- },
- {
- "id": 51,
- "plant_naam": "Sla",
- "plantensoort": "Groente",
- "plant_geteelt": 1
- },
- {
- "id": 52,
- "plant_naam": "Wietplant",
- "plantensoort": "Onkruid",
- "plant_geteelt": 0
- }
-]
\ No newline at end of file
diff --git a/src/py/script/DUMMY.json b/src/py/script/DUMMY.json
deleted file mode 100644
index abc4c3d..0000000
--- a/src/py/script/DUMMY.json
+++ /dev/null
@@ -1,113 +0,0 @@
-{ "battery_voltage_events": [
- {
- "timestamp": 1707825721,
- "gateway_receive_time": "2024-02-13T12:02:01Z",
- "device": 256,
- "value": 4.098901271820068
-
- },
- {
- "timestamp": 1707837460,
- "gateway_receive_time": "2024-02-13T15:17:40Z",
- "device": 322,
- "value": 4.105006217956543
- }
- ],
-
-
-
-
- "devices": [
- {
- "id": 256,
- "serial_number": "0033889B1BAB1169",
- "name": "firefly2_0051",
- "label": "The Field",
- "last_seen": 1707765066,
- "last_battery_voltage": 4.09768009185791
- },
- {
- "id": 322,
- "serial_number": "006FE1FC316ED7D8",
- "name": "firefly2_0111",
- "label": "The Field",
- "last_seen": 1707764966,
- "last_battery_voltage": 4.107448101043701
- }
- ],
-
-
-
-
-
- "par_events": [
- {
- "timestamp": 1707844638,
- "gateway_receive_time": "2024-02-13T17:17:18Z",
- "device": 322,
- "value": 0.0
- },
- {
- "timestamp": 1707851099,
- "gateway_receive_time": "2024-02-13T19:04:59Z",
- "device": 256,
- "value": 0.0
- }
- ],
-
-
-
-
- "relative_humidity_events": [
- {
- "timestamp": 1707844638,
- "gateway_receive_time": "2024-02-13T17:17:18Z",
- "device": 322,
- "value": 71.08984375
- },
- {
- "timestamp": 1707851099,
- "gateway_receive_time": "2024-02-13T19:04:59Z",
- "device": 256,
- "value": 66.7294921875
- }
- ],
-
-
-
-
-
- "soil_electric_conductivity_events": [
- {
- "timestamp": 1707851215,
- "gateway_receive_time": "2024-02-13T19:06:55Z",
- "device": 322,
- "value": 0.0
- }
- ],
-
-
-
-
-
- "soil_relative_permittivity_events": [
- {
- "timestamp": 1707851215,
- "gateway_receive_time": "2024-02-13T19:06:55Z",
- "device": 322,
- "value": 1.52
- }
- ],
-
-
-
- "soil_temperature_events": [
- {
- "timestamp": 1707851215,
- "gateway_receive_time": "2024-02-13T19:06:55Z",
- "device": 322,
- "value": 12.06
- }
- ]
- }
-
\ No newline at end of file
diff --git a/src/py/script/battery_voltage_events.py b/src/py/script/battery_voltage_events.py
index d37ac61..baa1c3a 100644
--- a/src/py/script/battery_voltage_events.py
+++ b/src/py/script/battery_voltage_events.py
@@ -2,6 +2,7 @@ import mysql.connector
import requests
from datetime import datetime, timezone, timedelta
import time
+import sys
# Function to make a connection to the database
def database_connect():
@@ -40,10 +41,10 @@ def create_data(url, access_token, repeat_count=5):
value = record.get('value', '')
print(f"\nInserted data: Timestamp: {timestamp}, Device: {device}, Battery Voltage: {value}V\n")
- if float(value) < 3.0:
+ if float(value) < 5.0:
print("Waarschuwing: Batterijspanning is lager dan 3.0 volt. Opladen aanbevolen.\n")
# Controleer of de batterijspanning hoger is dan 4.2 volt en geef een melding
- elif float(value) > 4.2:
+ elif float(value) > 6.2:
print("Melding: Batterijspanning is hoger dan 4.2 volt. Batterij is vol.\n")
else:
print("Melding: Batterijspanning is binnen het gewenste bereik.\n\n")
diff --git a/src/py/script/db_connect_form.py b/src/py/script/db_connect_form.py
index eb78cce..5202ebc 100644
--- a/src/py/script/db_connect_form.py
+++ b/src/py/script/db_connect_form.py
@@ -3,7 +3,6 @@ import json
import mysql.connector #** TYPE IN TERMINAL: "pip install mysql-connector-python"
from mysql.connector import Error
-
# Voeg de data uit het formulier toe aan de database
def insert_plant_name(plant_naam, plantensoort, plant_geteelt):
diff --git a/src/py/script/plants.json b/src/py/script/plants.json
index a499c72..5790255 100644
--- a/src/py/script/plants.json
+++ b/src/py/script/plants.json
@@ -1,26 +1,14 @@
[
{
- "id": 3,
+ "id": 1,
"plant_naam": "Tomatenplant",
"plantensoort": "Groente",
"plant_geteelt": 1
},
{
- "id": 4,
+ "id": 15,
"plant_naam": "Sla",
"plantensoort": "Groente",
"plant_geteelt": 1
- },
- {
- "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/script/testen.py b/src/py/script/testen.py
deleted file mode 100644
index b604664..0000000
--- a/src/py/script/testen.py
+++ /dev/null
@@ -1,218 +0,0 @@
-import requests
-import time
-
-from db_connect import database_connect
-
-##########################* DEVICES #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- insert_query = """
- INSERT INTO goodgarden.devices (serial_number, name, label, last_seen, last_battery_voltage)
- VALUES (%s, %s, %s, %s, %s )
- """
- for record in data['results']:
- serial_number = record.get('serial_number', '')
- name = record.get('name', '')
- label = record.get('label', '')
- last_seen = record.get('last_seen', '')
- last_battery_voltage = record.get('last_battery_voltage', '')
-
- print(f"Inserting data: serial_number={serial_number}, name={name}, label={label}, last_seen={last_seen}, last_battery_voltage={last_battery_voltage}")
-
- mycursor.execute(insert_query, (serial_number, name, label, last_seen, last_battery_voltage))
-
- mydb.commit()
-
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
-
-############################### EINDE ########################
- # #
- # #
- # #
- # #
-##########################* PAR_EVENTS #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- # Here you need to adjust the correct column names and data formats based on the API response
- insert_query = """
- INSERT INTO goodgarden.par_events (timestamp, gateway_receive_time, device, value)
- VALUES (%s, %s, %s, %s)
- """
- for record in data['results']:
- timestamp = record.get('timestamp', '')
- gateway_receive_time = record.get('gateway_receive_time', '')
- device = record.get('device', '')
- value = record.get('value', '')
-
- print(f"Inserting data: timestamp={timestamp}, gateway_receive_time={gateway_receive_time}, device={device}, value={value}")
-
- # Execute the query
- mycursor.execute(insert_query, (timestamp, gateway_receive_time, device, value))
-
- # Commit the changes
- mydb.commit()
-
- # Close cursor and connection
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
-
-############################### EINDE ########################
- # #
- # #
- # #
- # #
-##########################* RELATIVE_HUMIDITY_EVENTS #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- # Here you need to adjust the correct column names and data formats based on the API response
- insert_query = """
- INSERT INTO goodgarden.relative_humidity_events (timestamp, gateway_receive_time, device, value)
- VALUES (%s, %s, %s, %s)
- """
- for record in data['results']:
- timestamp = record.get('timestamp', '')
- gateway_receive_time = record.get('gateway_receive_time', '')
- device = record.get('device', '')
- value = record.get('value', '')
-
- print(f"Inserting data: timestamp={timestamp}, gateway_receive_time={gateway_receive_time}, device={device}, value={value}")
-
- # Execute the query
- mycursor.execute(insert_query, (timestamp, gateway_receive_time, device, value))
-
- # Commit the changes
- mydb.commit()
-
- # Close cursor and connection
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
-
-############################### EINDE ########################
- # #
- # #
- # #
- # #
-##########################* SOIL_ELECTRIC_CONDUCTIVITY_EVENTS #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- # Here you need to adjust the correct column names and data formats based on the API response
- insert_query = """
- INSERT INTO goodgarden.soil_electric_conductivity_events (timestamp, gateway_receive_time, device, value)
- VALUES (%s, %s, %s, %s)
- """
- for record in data['results']:
- timestamp = record.get('timestamp', '')
- gateway_receive_time = record.get('gateway_receive_time', '')
- device = record.get('device', '')
- value = record.get('value', '')
-
- print(f"Inserting data: timestamp={timestamp}, gateway_receive_time={gateway_receive_time}, device={device}, value={value}")
-
- # Execute the query
- mycursor.execute(insert_query, (timestamp, gateway_receive_time, device, value))
-
- # Commit the changes
- mydb.commit()
-
- # Close cursor and connection
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
-
-############################### EINDE ########################
- # #
- # #
- # #
- # #
-##########################* SOIL_TEMPERATURE_EVENTS #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- # Here you need to adjust the correct column names and data formats based on the API response
- insert_query = """
- INSERT INTO goodgarden.soil_temperature_events (timestamp, gateway_receive_time, device, value)
- VALUES (%s, %s, %s, %s)
- """
- for record in data['results']:
- timestamp = record.get('timestamp', '')
- gateway_receive_time = record.get('gateway_receive_time', '')
- device = record.get('device', '')
- value = record.get('value', '')
-
- print(f"Inserting data: timestamp={timestamp}, gateway_receive_time={gateway_receive_time}, device={device}, value={value}")
-
- # Execute the query
- mycursor.execute(insert_query, (timestamp, gateway_receive_time, device, value))
-
- # Commit the changes
- mydb.commit()
-
- # Close cursor and connection
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
-
-############################### EINDE ########################
- # #
- # #
- # #
- # #
-##########################* SOIL_TEMPERATURE_EVENTS #######################
-
-def load_data(data):
- mydb = database_connect()
- if mydb.is_connected():
- mycursor = mydb.cursor()
-
- # Here you need to adjust the correct column names and data formats based on the API response
- insert_query = """
- INSERT INTO goodgarden.soil_temperature_events (timestamp, gateway_receive_time, device, value)
- VALUES (%s, %s, %s, %s)
- """
- for record in data['results']:
- timestamp = record.get('timestamp', '')
- gateway_receive_time = record.get('gateway_receive_time', '')
- device = record.get('device', '')
- value = record.get('value', '')
-
- print(f"Inserting data: timestamp={timestamp}, gateway_receive_time={gateway_receive_time}, device={device}, value={value}")
-
- # Execute the query
- mycursor.execute(insert_query, (timestamp, gateway_receive_time, device, value))
-
- # Commit the changes
- mydb.commit()
-
- # Close cursor and connection
- mycursor.close()
- mydb.close()
-
- print("Data inserted into the database.")
\ No newline at end of file
diff --git a/src/py/static/css/style.css b/src/py/static/css/style.css
index 412de2a..9fc7264 100644
--- a/src/py/static/css/style.css
+++ b/src/py/static/css/style.css
@@ -334,7 +334,12 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-
.switch-container {
display: flex;
- align-items: end;
+ align-items: center;
+ justify-content: flex-end;
+}
+
+.switch-wrapper {
+ margin-left: 20vw;
}
.switch {
@@ -343,12 +348,14 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-
width: 60px;
height: 30px;
}
-.switch .switch input {
+
+.switch input[type=checkbox] {
opacity: 0;
width: 0;
height: 0;
}
-.switch .slider {
+
+.slider {
position: absolute;
cursor: pointer;
top: 0;
@@ -359,7 +366,8 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-
border-radius: 34px;
transition: 0.4s;
}
-.switch .slider:before {
+
+.slider:before {
position: absolute;
content: "";
height: 26px;
@@ -370,22 +378,28 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-
border-radius: 50%;
transition: 0.4s;
}
-.switch input:checked + .slider {
+
+input:checked + .slider {
background-color: #2ecc71;
}
-.switch input:checked + .slider:before {
+
+input:checked + .slider:before {
transform: translateX(26px);
}
-.switch .rechterkant {
+
+.rechterkant {
display: flex;
justify-content: end;
}
-.switch .plant-container,
-.switch #modalButton {
+
+.plant-container,
+#modalButton {
background-color: white;
}
-.switch .switch-container {
+
+.switch-container {
position: absolute;
+ right: 75px;
}
.pagina-container {
diff --git a/src/py/static/css/style.css.map b/src/py/static/css/style.css.map
index 38e0962..991b722 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 25e7e1a..b1aa5e2 100644
--- a/src/py/static/css/style.scss
+++ b/src/py/static/css/style.scss
@@ -462,25 +462,29 @@ body
background: linear-gradient(45deg, #ffcc00, #ff6600);
}
-
.switch-container {
display: flex;
- align-items: end;
+ align-items: center;
+ justify-content: flex-end;
}
-
+
+.switch-wrapper {
+ margin-left: 20vw; // slider aan rechterkant
+}
+
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 30px;
-
-
-.switch input {
+}
+
+.switch input[type="checkbox"] {
opacity: 0;
width: 0;
height: 0;
}
-
+
.slider {
position: absolute;
cursor: pointer;
@@ -492,7 +496,7 @@ body
border-radius: 34px;
transition: 0.4s;
}
-
+
.slider:before {
position: absolute;
content: "";
@@ -504,31 +508,29 @@ body
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;
}
-
+
.switch-container {
position: absolute;
+ right: 75px;
}
-}
-
.pagina-container {
position: relative;
align-items: end;
@@ -586,10 +588,3 @@ input:checked + .slider:before {
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/warning-logo.png b/src/py/static/images/warning-logo.png
new file mode 100644
index 0000000..208e18b
Binary files /dev/null and b/src/py/static/images/warning-logo.png differ
diff --git a/src/py/static/js/main.js b/src/py/static/js/main.js
index 8212056..3d7a228 100644
--- a/src/py/static/js/main.js
+++ b/src/py/static/js/main.js
@@ -40,41 +40,35 @@ function openModal()
}
}
}
- // else
- // {
- // console.error("Modaal elementen niet gevonden");
- // }
}
-// document.addEventListener('DOMContentLoaded', () => {
- // Call openModal when DOM content is loaded
- openModal();
-
- // Send a message to the main process to execute the Python script
- ipcRenderer.send('run-python-script', ['some', 'arguments']);
-
- 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
- }
- });
-
- // 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');
-
- // Fetch battery data when the page loads
- fetchBatteryData();
-// });
+// Call openModal when DOM content is loaded
+openModal();
+
+// Send a message to the main process to execute the Python script
+ipcRenderer.send('run-python-script', ['some', 'arguments']);
+
+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
+ }
+});
+
+// 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');
+
+// Fetch battery data when the page loads
+fetchBatteryData();
/**
* Functie om een lijngrafiek te tekenen.
@@ -197,38 +191,6 @@ function fetchWeatherDataAndDrawChart()
});
}
-/**
- * Functie om een datum (bijv. "07-02") om te zetten naar de dag van de week (bijv. "zo", "ma", etc.).
- * @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)
-// {
-// // 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.
* Deze functie haalt data op met Axios en verwerkt deze vervolgens.
@@ -403,4 +365,21 @@ fetch(apiUrl)
// 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
+
+// Get the battery voltage
+const batteryVoltage = parseFloat(document.getElementById('battery-voltage').textContent);
+
+// Select the img element
+const batteryImage = document.getElementById('battery-image');
+
+// Check the battery voltage and decide whether to show the image
+if (batteryVoltage < 3.0) {
+ // Battery is lower than 3.0 volts, show the empty battery image
+ batteryImage.src = '../static/img/warning-logo.png';
+} else if (batteryVoltage > 4.2) {
+ // Battery is higher than 4.2 volts, do not show the image
+ batteryImage.style.display = 'none';
+} else {
+ // Battery voltage is within the desired range, hide the image
+ batteryImage.style.display = 'none';
+}
\ 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 9690491..c094936 100644
--- a/src/py/static/js/planten.class.js
+++ b/src/py/static/js/planten.class.js
@@ -28,7 +28,7 @@ class PlantGrid {
// Methode om data te laden.
loadData() {
- fetch('../script/plants.json') // Veronderstelt dat de JSON data is opgeslagen in 'plants.json'.
+ fetch('../script/plants.json')
.then(response => {
// Controleer of de netwerkrespons ok is.
if (!response.ok) {
@@ -89,7 +89,6 @@ class PlantGrid {
const article = document.createElement("article");
const img = article.appendChild(document.createElement("img"));
img.src = "../static/images/plus.png";
- // img.src = "../images/plus.png";
img.id = "toevoegen";
img.alt = "Add";
article.id = "modalButton";
diff --git a/src/py/templates/index.html b/src/py/templates/index.html
index 8fa8e53..c881fb1 100644
--- a/src/py/templates/index.html
+++ b/src/py/templates/index.html
@@ -1,170 +1,151 @@
-
+
-
-
-
+
+
+
Dashboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/src/py/templates/kas_informatie.html b/src/py/templates/kas_informatie.html
index d2182ab..02bb69c 100644
--- a/src/py/templates/kas_informatie.html
+++ b/src/py/templates/kas_informatie.html
@@ -1,11 +1,11 @@
-
+
-
-
-
+
+
+
Informatie Kas
@@ -130,7 +130,5 @@
-
diff --git a/src/py/templates/planteninfo.html b/src/py/templates/planteninfo.html
index ad8245e..967450b 100644
--- a/src/py/templates/planteninfo.html
+++ b/src/py/templates/planteninfo.html
@@ -1,11 +1,11 @@
-
+
-
-
-
+
+
+
Planten
@@ -35,6 +35,17 @@
diff --git a/src/py/templates/pomp_informatie.html b/src/py/templates/pomp_informatie.html
index 0275266..5c1bbee 100644
--- a/src/py/templates/pomp_informatie.html
+++ b/src/py/templates/pomp_informatie.html
@@ -1,14 +1,14 @@
-
+
-
-
-
+
+
+
- Informatie Kas
+ Informatie Pomp
@@ -50,7 +50,7 @@
Laatste Irrigatie: |
18:00 |
-
+
@@ -130,7 +130,5 @@
-
diff --git a/src/py/templates/sensor.html b/src/py/templates/sensor.html
index c5f172e..8ba9cdd 100644
--- a/src/py/templates/sensor.html
+++ b/src/py/templates/sensor.html
@@ -1,14 +1,14 @@
-
+
-
-
-
+
+
+
- Informatie Kas
+ Informatie Sensor
-