Nabend zusammen,
vorab schonmal vielen Dank für alle zahlreichen Tipps die ich von jedem bekommen habe.
Ich habe einige Tipps kombinieren können und was soll ich sagen.
Der Sensor läuft jetzt soweit ich es kurz testen konnte GUT. Sowohl bei schneller als langsamer Wasserentnahme.
@Gregor:
gregorss:
JSo etwas bekomme ich in meinem Display nie zu sehen, weil ich die Hintergrundbeleuchtung erst nach der Initialisierung mit ...begin() einschalte. Wenn es immer erscheint, wenn es auch nur an die Betriebsspannung angelegt wird, ist das Müll vom Display-Controller. Solange es funktioniert und du drumherum-arbeiten kannst, musst Du Dir wohl keine Sorgen machen.
Ok alles klar. Das blöde ist nur das ich jedesmal nach stromzufuhr dann den reset Knop drücken muss damit die Werte wieder weg sind.
Hier ist auch nochmal der Code für das jetzt schonmal funktionierende Zählerchen. Ich habe mir noch die Mühe gemacht step für step ein paar Erklärungen dabei zu schreiben, falls jemand irgendwann mal auch nach so etwas suchen sollte 
#include <LiquidCrystal.h>
LiquidCrystal lcd(22,23,24,25,26,27);
int relais = 13;
int sensor_state = LOW;
int sensor = 0;
int pulsschritte = 1;
int zaehlerstand = 0;
int counter = 0;
int state = LOW;
int laststate = HIGH;
unsigned long relais_time;
int relais_state = LOW;
int hysterese = 100;
void setup() {
// put your setup code here, to run once:
pinMode(relais, OUTPUT); //Es wird angegeben das relais ein Output ist.
pinMode(sensor, INPUT); // Es wird angegeben das sensor ein Input ist.
lcd.begin(16,2); // LCD wird gestartet.
lcd.setCursor(0,0); //Cursor wird an 1. Stelle in der 1. Zeile gesetzt.
lcd.print("Wasserstand"); // Wasserstand wird ins Display geschrieben.
lcd.setCursor (14,1); //Cursor wird an 15. Stelle in der 2. Zeile gesetzt.
lcd.print("M3"); //M3 wird in das Display geschrieben.
}
void loop(){
lcd.setCursor(0,1); //Cursor wird an 1. Stelle in der 2. Zeile gesetzt.
lcd.print (zaehlerstand); // Der Wert aus Variable "zaehlerstand" wird in das Display geschrieben.
lcd.setCursor(8,1); //Cursor wird an 9. Stelle in der 2. Zeile gesetzt.
lcd.print (counter); // Der Wert aus Variable "Counter" wird in das Display geschrieben.
if(analogRead(sensor) > 800 + hysterese) // Wert des (Licht)sensors wird Analog eingelesen und verglichen ob dieser größer ist als der Hysteresen Schwellwert Einschalten.
{
sensor_state = HIGH; // Wenn der (Licht) sensor Wert größer als der Hysteresen Schwellwert ist, dann wird die Variable "sensor_state" auf HIGH gesetzt.
}
else if(analogRead(sensor) < 200 - hysterese) // Ist der Wert nicht größer als der Wert für den hysteresen einschaltschwellwert,
// wird verglichen ob dieser Wert kleiner ist als der Hysteresen Auschhalt Schwellwert.
{
sensor_state = LOW; // Ist der sensor Wert kleiner als der Hysteresen Ausschaltschwellwert, so wird die Variable "sensor_state" auf LOW gesetzt.
}
state = sensor_state; // Der Wert der Variable "sensor_state" wird in die Variable "state" übernommen.
//Flankenwechsel erkennen
if(laststate == LOW && state == HIGH) // Hier wird der Flankenwechsel ausgewertet. Wenn die Variable "laststate" = LOW ist & die Variable "state" = HIGH, dann
{
zaehlerstand++; //Zähler erhöhen &
counter = counter + pulsschritte; // die variable "counter" übernimmt den Wert aus der Variable "counter" + "pulssschritte" &
if (counter == 0 || counter == 5) // Hier wird gechecked ob die variable "counter" = 0 oder 5 ist.
{
relais_time = millis(); //Ist die Bedingung wahr, so schreibe die aktuelle vergangene Zeit seit Systemstart (in Millisekunden) in die Variable "relais_time" &
digitalWrite(relais,HIGH); // setze das Ausgangs Relais auf HIGH &
relais_state = HIGH; // setze die Variable "relais_state" auf HIGH %
pulsschritte = -pulsschritte; // übernehme in die Variable "pulsschritte" den Wert -"pulsschritte" (Dies sorgt dafür das der Counter addiert bzw. subtrahiert wird)
}
}
if (relais_state == HIGH) // Wenn die Variable "relais_state" = HIGH ist, dann:
{if (millis()-relais_time > 500) // Wenn die aktuelle vergangene Zeit seit Systemstart (in Millisekunden) - der angegebenen Zeit in der Variable "relais_time"
// größer als 500 Millisekunden ist, dann:
{ digitalWrite(relais, LOW); // Setze das Ausgangs relais auf LOW &
relais_state = LOW; // Setze die Variable "relais_state" auf LOW
}
}
//letzten zustand merken
laststate = state; // übernehme den Wert aus der Variable "state" in die Variable "laststate".
}
Wie schon erwähnt führte hier zur Lösung das delay zu ersetzen durch Millis, den Flankenwechsel zu erkennen und auch zuletzt noch die Hysterese einzubauen um werte Schwankungen auszugleichen.
Ich vermute der eine oder andere bekommt diesen Code auch noch besser/kürzer hin.
Für mich auf jedenfall ist er so schon sehr gut und bin froh das ihr mir hier geholfen habt, bei meinem Ersten Projekt 
Da es aber noch weiter geht, wollte ich Fragen wie sieht es aus mit Werte speichern? Habe schon gelesen das EEprom unvorteilhaft ist, da er nicht so oft beschrieben werden kann.
Wäre SD Karte eine alternative von der Geschwindigkeit her?
Ich würde nämlich gerne alle 10 L oder so den Wert abspeichern und bei jeder kWh für eventuelle Strom ausfälle. Für das vorhaben über KNX ist das an sich nicht so wichtig, aber da ich ja nu auch schon ein LCD habe würde ich auch die Werte gerne dort anzeigen lassen.
Für den Stromzähler, kann ich hier den Code übernehmen (abändern der Variablen) und einfach unter den anderen setzen, bzw darüber? Da die Stromimpulse eig. kontinuierlich gezählt werden müssen.
Langer Text Fragen über Fragen
Entschuldigt das der so kang geworden ist und sich evtl. zieht zum lesen 
Lg
Dennis.