Vorbemerkung: Ich bin 70 Jahre alt und möchte/kann nicht mehr komplett programmieren lernen, aber es macht mir Spaß, für bestimmte Aufgaben Lösungen zu finden, die auf einem Raspberry laufen. Ich versuchs mit Python.
Zur Aufgabe: Ich habe eine Regenwassertonne vor dem Haus und hinter dem Haus einen großen Regenwassertank. In der Tonne ist eine Pumpe, die das Wasser nach hinten pumpt. Über einen Reedkontakt wird an den Raspi gemeldet wenn die Pumpe läuft. Aus der Laufzeit wird die transportierte Wassermenge errechnet. Das Ganze wird in eine Datei geschrieben (Ein- und Ausschaltzeit der Pumpe, Laufzeit, Wassermenge). Leider kommt es wie eigentlich erwartet zum Prellen des Schalters und damit zu vielen überflüssigen Eintragungen in der Datei. Ich habe verschiedene Lösungsansätze gefunden aber nichts hilft wirklich. Hat da jemand eine Idee? Wenn ich da eine Lösung habe möchte ich die Daten eigentlich in eine csv-Datei schreiben.
Hier mein Script:
"""
19.04.2024
neuer Versuch, Überwachung Laufzeiten Regenwasserpumpe. Gibt Ein- und Ausschaltzeit aus, sowie die Laufzeit in Sekunden. Pumpleistung aktualisiert.
Aufruf über: python -u regenwasserpumpe.py Funktioniert hier noch nicht zuverlässig. Programm im Terminalfenster starten mit 'nohup /usr/bin/python /home/pi/python/regenwasserpumpe.py'. Durch 'nohup' läuft es auch nach schließen des Terminals. Prellen des Schützes muss noch behoben werden.
10.06.24
testweise Entprellen mit Time.slep
17.06.24
Script laeuft jetzt als Service -pumpe.service- in /lib/systemd/system
"""
#! /usr/bin/python3
from gpiozero import Button
from signal import pause
from csv import writer
import csv
import datetime
import time
import sys
f = open("/home/pi/python/musterdatei.txt", 'a') # Umleitung der Ausgabe in Datei
sys.stdout = f # Standardausgabe geändert
def ein():
global eingeschaltet
aktuellesEinDatum = datetime.datetime.now()
global einzeit
einzeit = time.time()
eingeschaltet = aktuellesEinDatum.strftime("%d.%m.%Y, %H:%M:%S")
print("EIN ", eingeschaltet, flush=True)
time.sleep (100/1000) # entprellen
def aus():
global ausgeschaltet
aktuellesEinDatum = datetime.datetime.now()
ausgeschaltet = (aktuellesEinDatum.strftime("%d.%m.%Y, %H:%M:%S"))
print("AUS ", ausgeschaltet, flush=True)
laufzeit = ((time.time() - einzeit))
print("Laufzeit: ", round(laufzeit, 1), "Sekunden", flush=True)
menge = laufzeit * 0.1367 #Pumpenleistung ist 8,2Ltr pro Minute
print(round(menge, 1), " Liter\n", flush=True)
time.sleep (100/1000) # entprellen
taster = Button(23)
taster.when_pressed = ein
time.sleep ( 500/1000 ) # entprellen
taster.when_released = aus
time.sleep ( 500/1000 ) # entprellen
pause()
Display More
Und hier die Ausgabe als Textdatei:
EIN 26.09.2024, 03:00:42
AUS 26.09.2024, 03:01:55
Laufzeit: 73.2 Sekunden
10.0 Liter
EIN 26.09.2024, 03:08:24
AUS 26.09.2024, 03:08:24
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:08:24
AUS 26.09.2024, 03:08:24
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:08:24
AUS 26.09.2024, 03:08:24
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:08:24
AUS 26.09.2024, 03:09:03
Laufzeit: 38.9 Sekunden
5.3 Liter
EIN 26.09.2024, 03:28:36
AUS 26.09.2024, 03:28:37
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:28:37
AUS 26.09.2024, 03:28:37
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:28:37
AUS 26.09.2024, 03:28:37
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:28:37
AUS 26.09.2024, 03:28:37
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:28:37
AUS 26.09.2024, 03:28:37
Laufzeit: 0.1 Sekunden
0.0 Liter
EIN 26.09.2024, 03:28:37
AUS 26.09.2024, 03:29:42
Laufzeit: 64.2 Sekunden
8.8 Liter
Display More
Danke schon mal ....