Aus Raspberry Pi Geek 07/2023

Überwachung eines Bienenstocks und Visualisierung der Messwerte mit Grafana

© darios / 123RF.com

Summ, summ

Martin Mohr

Bienen sind hochsensible Wesen, die relativ empfindlich auf Umwelteinflüsse reagieren. Mit Grafana realisieren Sie für einen Bienenstock eine Temperatur- und Luftfeuchtigkeitsüberwachung und visualisieren die Daten über Messdiagramme.

Alse zentrale Komponente unseres Projektes zur Temperaturüberwachung von Bienenstöcken dient ein Grafana-Server. Mit ihm lassen sich beliebige Informationen aus unterschiedlichen Datenquellen leicht visuell im Browser abbilden. Über ein einfach zu bedienendes Web-Interface erstellen Sie Dashboards für verschiedene Anwendungsfälle. Grafana erlaubt es sogar, einzelne Komponenten in eigene Applikationen zu integrieren. Von Grafana existieren unterschiedliche Varianten, für unser Projekt nutzen wir die selbst gehostete Open-Source-Variante. Die dementsprechenden Quellen finden Sie auf Github [1], die vollständige Dokumentation auf der Projektseite [2].

Testaufbau

Um Grafana sinnvoll einzusetzen, benötigen wir zunächst eine Umgebung, die uns die entsprechenden Daten bereitstellt. Sie setzt sich wie folgt zusammen: Ein ESP32 Microcontroller auf dem Micropython läuft, misst die aktuelle Luftfeuchtigkeit und Temperatur im Bienenstock. Die Messwerte überträgt eine mit FastAPI [3] implementierte REST-API an einen Server. Zum Speichern der Daten verwenden wir eine MariaDB. Grafana verbindet sich mit der Datenbank und visualisiert die gespeicherten Messwerte. Wir zeigen in den folgenden Abschnitten Schritt für Schritt, wie Sie die einzelnen Bestandteile des Projektes aufsetzen. Dabei greifen wir an den entsprechenden Stellen auf bereits veröffentlichte Texte zurück. Im Kasten “Bienen” finden Sie Wissenswertes über Bienen, sowie Informationen zu unserem speziellen Bienenstock.

Bienen

Weltweit gibt es eine Vielzahl unterschiedlicher Bienenarten. In unseren Breitengraden ist für die Imkerei die westliche Honigbiene relevant. Für die Gesundheit eines Bienenvolks spielen Umweltparameter wie die Temperatur und die Luftfeuchtigkeit in Bienenstock eine entscheidende Rolle.

Konkret geht es in unserem Projekt um den Bienenstock aus Abbildung 1. Dieser dient dazu, Schülern im Unterricht die Zusammenhänge von Umwelt und Natur näher zu bringen.

Abbildung 1: Als Grundlage für diesen Artikel dient ein Bienenstock einer Schule, der den Schülern die Zusammenhänge von Umwelt und Natur näher bringt.

Abbildung 1: Als Grundlage für diesen Artikel dient ein Bienenstock einer Schule, der den Schülern die Zusammenhänge von Umwelt und Natur näher bringt.

Server

Als Server für unser Projekt kommt jeder beliebige Linux-Rechner infrage. Wenn Sie allerdings den Server rund um die Uhr betreiben möchten, sollten Sie den Stromverbrauch in Blick behalten. Hier empfiehlt sich ein sparsamer Raspberry Pi. Möchten Sie die Daten über das Internet abrufen, muss der Server von dort aus zu erreichen sein. Für diesen Fall bietet sich ein kleiner virtueller Server an, wie wir ihn hier verwenden. Als Betriebssystem kommt der Ubuntu Server 22.04 [4] zum Einsatz. Wir benötigen für unser Projekt einige zusätzliche Softwarepakete, die es zunächst zu installieren gilt. Die Kommandos dazu fasst Listing 1 zusammen.

Listing 1

Server-Installation

#### System aktualisieren
$ sudo apt update
$ sudo apt upgrade
#### GCC installieren
$ sudo apt install build-essential
#### MariaDB installieren
$ sudo apt install mariadb-server
#### Nötige Bibliotheken installieren
$ sudo apt install libmariadb3 libmariadb-dev
$ sudo apt install python-dev-is-python3
#### Grafana installieren
$ sudo apt-get install -y adduser libfontconfig1
$ wget https://dl.grafana.com/oss/release/grafana_9.3.6_amd64.deb
$ sudo dpkg -i grafana_9.3.6_amd64.deb
#### FastAPI installieren
$ sudo apt install python3.10-venv
$ mkdir beeAPI
$ cd beeAPI
$ python3 -m venv beeAPIenv
$ source beeAPIenv/bin/activate
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ python -m pip install fastapi
$ pip install uvicorn
$ pip3 install mariadb

MariaDB

Zum Speichern der Messwerte setzen wir MariaDB ein. Wir müssen jetzt nur noch eine Datenbank mit dem zugehörigen User erstellen. Dazu verbinden wir uns als Administrator mit der Datenbank und setzen einige SQL-Kommandos ab (Listing 2).

Listing 2

Datenbank anlegen

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.11-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE bee;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> GRANT ALL ON bee.* TO 'beeUser'@'localhost' IDENTIFIED BY 'beePassword';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> CONNECT bee;
Connection id:    32
Current database: bee
MariaDB [bee]> CREATE TABLE bee.beeData (
    -> id INT auto_increment NOT NULL,
    -> hive_id INT NOT NULL,
    -> m_time DATETIME NULL,
    -> tmp FLOAT NULL,
    -> hum FLOAT NULL,
    -> CONSTRAINT beeData_PK PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected, 1 warning (0.020 sec)
MariaDB [bee]> EXIT
Bye

Falls Sie sich intensiver mit MariaDB beschäftigen möchten, bietet der Artikel “Gut organisiert” [5] aus einer früheren Ausgabe dieses Magazins interessante Anregungen.

FastAPI

Da der ESP32 keine direkte Verbindung zur Datenbank aufbauen kann, gehen wir hier einen kleinen Umweg über eine API. Sie liefert der ESP32 die benötigten Messwerte, die dann unsere Datenbank speichert. Beachten Sie, dass der Server für die API in einem virtuellen Python Environment läuft (source beeAPIenv/bin/activate) (Listing 3).

Um die API zu starten, verwenden Sie das nachstehenden Kommando.

uvicorn beeAPI:application\
  --host 0.0.0.0 --reload

Listing 3

beeAPI.py

from fastapi import FastAPI
import mariadb
import sys
try:
  con = mariadb.connect(
    user="beeUser",
    password="beePassword",
    host="localhost",
    port=3306,
    database="bee"
  )
except mariadb.Error as e:
  print(f"Error connecting to MariaDB Platform: {e}")
  sys.exit(1)
application = FastAPI()
@application.get("/bee")
async def bee(tmp: float = 0, hum: float = 0,hive: int = 0):
  cur=con.cursor()
  sql="INSERT INTO beeData (m_time, tmp, hum, hive_id)\
    VALUES (now(),'"+str(tmp)+"', '"+str(hum)+"','"+str(hive)+"')"
  cur.execute(sql)
  con.commit()
  return {"message": "ok"}
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben