ich habe mir eine Holztrocknungsanlage gebaut, die an einer Biogas Anlage angeschlossen ist.
Um die Temperatur und Luftfeuchtigkeit zu überwachen, habe ich einen Raspberry pi 3B mit Openhab und einem DHT22 Sensor ausgestattet.
Jetzt möchte ich gerne, sobald die Luftfeuchtigkeit im Container über den Wert X steigt für die Zeit X eine Pumpe zur Berieselung aktivieren und das einfach über ein Relais, dass am GPIO angeschlossen ist.
Ich tue mich noch schwer mit dem Programmieren, da bis jetzt immer alles was ich brauchte aus Anleitungen übernehmen konnte.
Hier mal das was funktuoniert:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import Adafruit_DHT
import sys, time
# constants
DHT_PIN = 23 # GPIO nr
DHT_SENSOR = Adafruit_DHT.DHT22
if __name__ == '__main__':
if len(sys.argv) > 1:
call = sys.argv[1].lower()
if call == 'temperature':
temperature = None
while temperature == None:
_, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if temperature == None:
time.sleep(1.5)
print(temperature)
elif call == 'humidity':
humidity = None
while humidity == None:
humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity == None:
time.sleep(1.5)
print(humidity)
Code: Alles auswählen
Thing exec:command:weatherstation_temperature "Temperatur" [command="/etc/openhab2/scripts/weatherstation.py temperature$
Thing exec:command:weatherstation_humidity "Luftfeuchtigkeit" [command="/etc/openhab2/scripts/weatherstation.py humidity", $
Code: Alles auswählen
Group Weatherstation_Chart (System, Charts)
Number Weatherstation_Chart_Period "Periode" (System)
Number Weatherstation_Temperature "Temperatur [%.1f °C]" <temperature> (Weatherstation_Chart)
Number Weatherstation_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> (Weatherstation_Chart)
String temperature_out { channel="exec:command:weatherstation_temperature:output" }
String humidity_out { channel="exec:command:weatherstation_humidity:output" }
Code: Alles auswählen
Strategies {
// for rrd charts, we need a cron strategy, every Minute is a must have.
everyMinute : "0 * * * * ?"
// get the data reduced for older values to keep database small
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
// additionally persist Items
Weatherstation_Chart* : strategy = everyUpdate, everyMinute
}
Code: Alles auswählen
rule "Weatherstation Temperature"
when
Item temperature_out received update
then
Weatherstation_Temperature.postUpdate(
( ( Float::parseFloat(temperature_out.state.toString) as Number ) * 10 ) / 10
)
end
rule "Weatherstation Humidity"
when
Item humidity_out received update
then
Weatherstation_Humidity.postUpdate(
( ( Float::parseFloat(humidity_out.state.toString) as Number ) * 10 ) / 10
)
end
Code: Alles auswählen
// Name of file and name of sitemap has to be the same
sitemap weatherstation label="Raspberry Pi Wetterstation"
{
Frame label="Innentemperatur" {
Text item=Weatherstation_Temperature
Text item=Weatherstation_Humidity
}
Frame {
Switch item=Weatherstation_Chart_Period mappings=[0="1h", 1="4h", 2="8h", 3="12h", 4="24h"]
Chart item=Weatherstation_Chart period=h refresh=60000 visibility=[Weatherstation_Chart_Period==0, Weatherst$
Chart item=Weatherstation_Chart period=4h refresh=60000 visibility=[Weatherstation_Chart_Period==1]
Chart item=Weatherstation_Chart period=8h refresh=60000 visibility=[Weatherstation_Chart_Period==2]
Chart item=Weatherstation_Chart period=12h refresh=60000 visibility=[Weatherstation_Chart_Period==3]
Chart item=Weatherstation_Chart period=D refresh=60000 visibility=[Weatherstation_Chart_Period==4]
}
}
Code: Alles auswählen
rule "Relais"
when
Item humidity_out <= 50
then
channe22.sendCommand (ON)
end
Wäre super, wenn mir jemand weiter helfen könnte.
Gruß
Hansi