So jetzt nochmal für die Nachwelt eine Zusammenfassung.
Vielen lieben Dank gehen hier nochmal an udo1toni raus, der mir (fast) alles alleine geschrieben hat. Ohne seine Hilfe würde ich heute immer noch dumm aus der Wäsche gucken.
hc.py
Code: Alles auswählen
#Bibliotheken
import RPi.GPIO as GPIO
import time
import logging
logging.basicConfig(filename='teich.log', filemode='w', level=logging.INFO)
#GPIO definieren (Modus, Pins, Output)
GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER = 18
GPIO_ECHO = 24
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
def entfernung():
# Trig High setzen
GPIO.output(GPIO_TRIGGER, True)
# Trig Low setzen (nach 0.01ms)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
Startzeit = time.time()
Endzeit = time.time()
# Start/Stop Zeit ermitteln
while GPIO.input(GPIO_ECHO) == 0:
Startzeit = time.time()
while GPIO.input(GPIO_ECHO) == 1:
Endzeit = time.time()
# Vergangene Zeit
Zeitdifferenz = Endzeit - Startzeit
# Schallgeschwindigkeit (34300 cm/s) einbeziehen
entfernung = 133 - (Zeitdifferenz * 34300) / 2
logging.info('Skript gestartet')
return entfernung
if __name__ == '__main__':
distanz = entfernung()
print (" %.1f" % distanz)
GPIO.cleanup()
exec.whitelist
Code: Alles auswählen
# For security reasons all commands that are used by the exec binding or transformation need to be whitelisted.
# Every command needs to be listed on a separate line belo
sudo /usr/bin/python /etc/openhab2/scripts/hc.py
teich.things
Code: Alles auswählen
Thing exec:command:teichstand [command="sudo /usr/bin/python /etc/openhab2/scripts/hc.py", interval=15, timeout=5, autorun=false]
teich.items
Code: Alles auswählen
String teichstring {channel="exec:command:teichstand:output"}
Switch teichmessung {channel="exec:command:teichstand:run"}
Number teichstand2 "Wasserstand [%.1f cm]" <flow>
Number teichchart
home.sitemap
Code: Alles auswählen
Frame label="Teich"{
Switch item=teichauto
Text item=teichstand2
}
Frame label="Teichstand" {Switch item=teichchart label="Zeiteinheit" icon="time" mappings=[0="Stunde", 1="Tag", 2="Woche", 3="Jahr"]
Chart item=teichstand2 period=h refresh=7200 visibility=[teichchart==0, teichchart=="Uninitialized"]
Chart item=teichstand2 period=D refresh=14400 visibility=[teichchart==1]
Chart item=teichstand2 period=W refresh=14400 visibility=[teichchart==2]
Chart item=teichstand2 period=Y refresh=14400 visibility=[teichchart==3]
}
Jetzt kommen die ganzen Rules.
teichbefuellung.rules
Code: Alles auswählen
rule "Automatische Teichbefüllung"
when
Time cron "0 0 8 * * ?"
then
if (teichauto.state == ON && teichstand2.state < 110) {
channel5.sendCommand(ON)
logInfo("Teich","Teichstand unter 1,10m. Teichbefüllung gestartet")
sendTelegram("bot1", "Teichstand unter 1,10m. Teichbefüllung gestartet")
}
if (teichauto.state == ON && teichstand2.state > 110) {
channel5.sendCommand(ON)
logInfo("Teich","Teichstand über 1,10m. Teichbefüllung nicht gestartet")
sendTelegram("bot1", "Teichstand über 1,10m. Teichbefüllung nicht gestartet")
}
end
teichvoll.rules
Code: Alles auswählen
rule "Teichvoll"
when
Item teichstand2 received update
then
if (teichstand2.state > 113 && channel5.state == ON) {
channel5.sendCommand(OFF)
logInfo("Teich","automatische Teichbefüllung beendet")
sendTelegram("bot1", "Teichbefüllung aufgrund der erreichten Wasserhöhe beendet")
}
end
teichstand.rules
Code: Alles auswählen
rule "Teichstand"
when
Item teichstring received update
then
teichstand2.postUpdate(Float::parseFloat(teichstring.state.toString)
)
end
rrd4j.persist
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
teichstand2 : strategy = everyMinute, restoreOnStartup
teichauto : strategy= everyChange
}