In meiner Zisterne kommen aktuell zwei Leitungen an: 1x CAT7 und 1x 3x1,5mm^2 Erdkabel.

Pumpe

Um die Pumpe anzuschließen, habe ich den Stecker vom Kabel entfernt und dann in einer Abzweigdose mit der Zuleitung verbunden. Hier habe ich extra eine Abzweigdose für den Außenbereich genommen, es wird ja doch recht feucht dort ;)

Anschluss Pumpe

Abzweigdose der Pumpe

Hier hängt noch das CAT7 Kabel lose herum...

Ultraschall Sensor

Heute sollte dann CAT7 Kabel auch verwendet werden. Ich habe mich an diesem Artikel orientiert.

Hier die Einkaufsliste:

Code

Der Code aus o.g. Artikel hat bei mir leider nicht funktioniert, da erstens die Includes unvollständig sind und zweitens die Applikation immer auf die Serial Console gewartet hat.

Hier mein leicht modifizierter Code:

// Bibliotheken einbinden
#include <Ethernet.h>
#include <Arduino.h>

// Netzwerk Einstellungen
// Hier die eigene MAC-Adresse eintragen
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEB };
// UDP Port zum Datenempfang Lox MS -> Arduino
unsigned int ARDUPORT = 7013;

// IP Loxone Miniserver
IPAddress MSIP(192, 168, 15, 148);
// UDP Port zum Datenversand Arduino -> Lox MS
unsigned int MSPORT = 7014;

// Daten-Puffer initalisieren
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];

// UDP Instanz erzeugen
EthernetUDP Udp;

// Die aktiven Pins am Ultraschallsensor festlegen
#define echoPin 8 // Echo
#define trigPin 9 // Trigger

// Konstanteninitialisierung
int maxReichweite = 300; // Maximale Reichweite des US Sensors
int minReichweite = 0; // Minimale Reichweite des US Sensors

// Variablendefinition
long dauer;
float distanz;
char chardistanz[10];

void setup() {

  Ethernet.begin(mac);

  Udp.begin(ARDUPORT); // Start UDP

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

void loop() {
  // Distanz auslesen
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  dauer = pulseIn(echoPin, HIGH);

  //Distanz in cm umrechnen
  distanz = dauer / 58.2;

  // Auswertung von Minimum und Maximum
  if (distanz >= maxReichweite || distanz <= minReichweite) {
  }
  else {
    dtostrf(distanz, 4, 0, chardistanz); //Distanz fuer UDP Versand umwandeln
    sendUDP(chardistanz); //Ergebnis an MiniServer senden
  }
  delay(5000); // Wartet 5000 Millisekunden bis zur naechsten Messung
}

//UDP-Befehl senden
void sendUDP(String text)
{
  Udp.beginPacket(MSIP, MSPORT);
  Udp.print(text);
  Udp.endPacket();
  delay(10);
}

Montage

Mal wieder in einer Abzweigdose, sitzt der Ultraschallsensor im Schacht und misst den Abstand zur Wasseroberfläche. Die Löcher habe ich professionell mit Heißkleber verschlossen.

Ultraschallsensor

Ultraschallsensor in der Abzweigdose

Ultraschallsensor

Ultraschallsensor in der Abzweigdose, verschlossen mit Heißkleber

Loxone Config

In Loxone habe ich einen virtuellen UDP Eingang für den Arduino auf Port 7013 angelegt und einen virtuellen Eingangsbefehl auf dem die Meßdaten empfangen werden.

Loxone

virtueller Eingangsbefehl

Für die Berechnung nutze ich den Radius und Höhe des Wasserstands der Zisterne nach der Formel:

π * r² * h

Da meine Zisterne einen Radius von 119cm hat und eine Füllhöhe von 180cm ergibt sich folgende Rechnung:

π * 119^2 * 180-Füllstandshöhe

Formelbaustein der Loxone Config:

((180-I1)*I3*I2^2)/1000

Loxone

Loxone Config

Für die Auswertung & Darstellung nutze ich einen Statusbaustein:

Loxone

Statusbaustein für die Zisterne

Außerdem nutze ich die Auswertung des Füllstands für die Steuerung der Pumpe. Diese lässt sich nur aktivieren, wenn der Füllstand der Zisterne mindestens 1.000 Liter beträgt. Geschaltet wird die Pumpe entweder über einen virtuellen Schalter in der App oder einen Schalter im Hauswirtschaftsraum.

Loxone

Loxone Config Gesamt

*Amazon Affiliate Link