Und was ist jetzt mit dem aht?
der läuft über den Pi ohne Probleme
Und was ist jetzt mit dem aht?
der läuft über den Pi ohne Probleme
Mein automatisches Gewächshaus - Scripttuning 2022? Schau mal ob du hier fündig wirst!
Gut.
Dann kannst du ja das Programm ne Weile laufen lassen um zu sehen ob alles funktioniert.
Gut.
Dann kannst du ja das Programm ne Weile laufen lassen um zu sehen ob alles funktioniert.
Die Berechnung passt zeigt jetzt 87% an, aber der ds18b20 mach ärger er zeigt mal an mal nicht, wäre es möglich den auch über den ESP32 laufen zu lassen.
Hast du einen 4.7k Widerstand zwischen der Datenleitung und dem 3V3 Leitung angeschlossen ?
Hast du einen 4.7k Widerstand zwischen der Datenleitung und dem 3V3 Leitung angeschlossen ?
ich habe diesen,
für den Test Aufbau gekauft und direkt an den Pi angeschlossen.
An welchen Pin hängt das Datenkabel vom DS18B20?
An welchen Pin hängt das Datenkabel vom DS18B20?
Das ist der Gipo4
Danke ich habe bis jetzt das Programm laufen lassen, und es Lief jetzt ohne Probleme nur die Symbole der ersten Zeile wurden nicht angezeigt.
#!/usr/bin/python3
import re
import adafruit_ahtx0
import board
import schedule
import serial
import toml
import adafruit_ds18x20
from datetime import datetime
from pathlib import Path
from threading import Thread
from time import sleep
from gpiozero import DigitalOutputDevice
from loguru import logger
from RPLCD.i2c import CharLCD
from adafruit_onewire.bus import OneWireBus
LOG_FILE = Path("/home/pi/GreenHouse/logfile.log")
class GreenHouse:
def __init__(self, config, lcd, output_devices, aht_device, ds18b20):
self.time_control = None
self.humidity_control = None
self.earth_humidity = None
self.earth_temperature = None
self.air_humidity = None
self.air_temperature = None
self.config = config
self.lcd = lcd
self.output_devices = output_devices
self.aht_device = aht_device
self.ds18b20 = ds18b20
def control_fan_for_humidity(self):
while True:
self.get_value_aht()
if self.air_humidity is None:
sleep(1)
continue
if (
self.air_humidity
>= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_max"]
):
self.output_devices["luefter"].on()
self.update_display((3, 19), chr(4))
elif (
self.air_humidity
<= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_min"]
):
self.output_devices["luefter"].off()
self.update_display((3, 19), " ")
else:
self.update_display((3, 19), "ok")
sleep(5)
def control_fan_for_temperature(self):
self.get_value_aht()
if self.air_temperature is not None:
if (
self.air_temperature
>= self.config["Lufttemperatur"]["lufttemperatur_max"]
):
self.output_devices["luefter"].on()
self.update_display((2, 8), chr(4))
elif (
self.air_temperature
<= self.config["Lufttemperatur"]["lufttemperatur_min"]
):
self.output_devices["luefter"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_fan_for_time(self):
display_values = {(0, 9): chr(6), (0, 10): chr(7)}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
sleep(0.5)
if self.config["Zeitsteuerung"]["zeit_steuerung"] == "taeglich":
schedule.every().day.at(self.config["Zeitsteuerung"]["start_zeit_t"]).do(
self.output_devices["luefter"].on
)
schedule.every().day.at(self.config["Zeitsteuerung"]["end_zeit_t"]).do(
self.output_devices["luefter"].off
)
elif self.config["Zeitsteuerung"]["zeit_steuerung"] == "stündlich":
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["start_zeit_s"]
).do(self.output_devices["luefter"].on)
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["end_zeit_s"]
).do(self.output_devices["luefter"].off)
def control_heating_map(self):
self.get_value_ds18b20()
if self.earth_temperature is not None:
if self.earth_temperature <= self.config["Heizmatte"]["erd_temperatur_min"]:
self.output_devices["heizmatte"].on()
self.update_display((2, 8), chr(3))
elif (
self.earth_temperature >= self.config["Heizmatte"]["erd_temperatur_max"]
):
self.output_devices["heizmatte"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_light(self):
schedule.every().day.at(self.config["Lichtsteuerung"]["start_zeit_licht"]).do(
self.output_devices["licht"].on
)
schedule.every().day.at(self.config["Lichtsteuerung"]["end_zeit_licht"]).do(
self.output_devices["licht"].off
)
@logger.catch
def control_pump(self):
self.get_value_giesomat()
try:
if (
self.earth_humidity
<= self.config["Bewaesserung"]["erd_feuchtigkeit_min"]
):
self.output_devices["pumpe"].on()
self.update_display((3, 8), chr(3))
sleep(10)
self.output_devices["pumpe"].off()
elif (
self.earth_humidity
>= self.config["Bewaesserung"]["erd_feuchtigkeit_max"]
):
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
else:
self.update_display((3, 8), "ok")
except TypeError:
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
@logger.catch
def get_value_aht(self):
try:
self.air_humidity = round(self.aht_device.relative_humidity, 0)
self.air_temperature = round(self.aht_device.temperature, 0)
except RuntimeError:
self.air_humidity = self.air_temperature = None
@logger.catch
def get_value_ds18b20(self):
try:
self.earth_temperature = round(ds18b20, 1)
if self.earth_temperature:
self.earth_temperature
else:
self.earth_temperature = None
except FileNotFoundError:
self.earth_temperature = None
@logger.catch
def get_value_giesomat(self):
try:
with serial.Serial("/dev/ttyUSB0", 57600, timeout=1) as connection:
sleep(3)
frequency = connection.readline().decode("utf8")
try:
self.earth_humidity = round(
(int(frequency) - self.config["Giesomat"]["hoechste_frequenz"])
/ (
self.config["Giesomat"]["niedrigste_frequenz"]
- self.config["Giesomat"]["hoechste_frequenz"]
)
* 100
)
except ValueError:
self.earth_humidity = None
except serial.SerialException:
self.earth_humidity = None
def start(self):
self.control_light()
if self.time_control:
self.control_fan_for_time()
elif self.humidity_control:
Thread(target=self.control_fan_for_humidity).start()
while True:
schedule.run_pending()
self.control_pump()
self.control_heating_map()
self.control_fan_for_temperature()
self.write_lcd_output()
sleep(1)
def setting_up_controlling(self):
if self.config["Luefter"]["steuerung_nach"] == "zeit":
self.time_control = True
self.humidity_control = False
elif self.config["Luefter"]["steuerung_nach"] == "luftfeuchtigkeit":
self.humidity_control = True
self.time_control = False
def update_display(self, cursor, text):
self.lcd.cursor_pos = cursor
self.lcd.write_string(text)
def write_lcd_output(self):
self.lcd.clear()
sensor_values = [
self.earth_humidity,
self.earth_temperature,
self.air_humidity,
self.air_temperature,
]
sensor_values = [
value if value is not None else "Fehler" for value in sensor_values
]
display_values = {
(0, 0): datetime.now().strftime("%d.%b"),
(0, 15): datetime.now().strftime("%H:%M"),
(1, 0): "--ERDE--- --LUFT---",
(3, 0): f"{chr(1)}{sensor_values[0]}%",
(2, 0): f"{chr(0)}{sensor_values[1]}{chr(2)}C",
(3, 11): f"{chr(1)}{sensor_values[2]}%",
(2, 11): f"{chr(0)}{sensor_values[3]}{chr(2)}C",
}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
if self.output_devices["licht"].value:
self.update_display((0, 12), chr(5))
else:
self.update_display((0, 12), " ")
def load_config_file():
return toml.loads(
Path.joinpath(Path(__file__).parent.absolute(), "greenhouse.conf").read_text()
)
def setup_lcd(lcd, config):
for number, symbol in enumerate(config["Symbole"]):
lcd.create_char(number, tuple(config["Symbole"][symbol]))
@logger.catch
def main():
logger.add(
LOG_FILE, backtrace=True, diagnose=True, format="{time:HH:mm:ss} {message}"
)
config = load_config_file()
lcd = CharLCD("PCF8574", 0x27)
try:
setup_lcd(lcd, config)
output_devices = {}
for device in config["Devices"]:
output_devices[device] = DigitalOutputDevice(
config["Devices"][device], active_high=False
)
i2c = board.I2C()
aht_device = adafruit_ahtx0.AHTx0(i2c, 0x38)
ow_bus = OneWireBus(board.D4)
ds18b20 = adafruit_ds18x20.DS18X20(ow_bus, devices[0])
greenhouse = GreenHouse(config, lcd, output_devices, aht_device, ds18b20)
greenhouse.setting_up_controlling()
greenhouse.start()
except KeyboardInterrupt:
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(datetime.now().strftime("%d.%m.%y %H:%M:%S"))
lcd.cursor_pos = (3, 2)
lcd.write_string("Benutzerabbruch!")
sleep(3)
schedule.clear()
lcd.close(clear=True)
if __name__ == "__main__":
main()
Alles anzeigen
pi@raspberrypi:~ $ cd Desktop
pi@raspberrypi:~/Desktop $ python3 Test.py
2022-05-02 19:18:48.760 | ERROR | __main__:<module>:286 - An error has been caught in function '<module>', process 'MainProcess' (3513), thread 'MainThread' (3069790592):
Traceback (most recent call last):
> File "/home/pi/Desktop/Test.py", line 286, in <module>
main()
-> <function main at 0xb61265c8>
File "/home/pi/Desktop/Test.py", line 267, in main
ow_bus = OneWireBus(board.D4)
| | -> 4
| -> <module 'board' from '/home/pi/.local/lib/python3.9/site-packages/board.py'>
-> <class 'adafruit_onewire.bus.OneWireBus'>
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_onewire/bus.py", line 68, in __init__
self._ow = busio.OneWire(pin)
| | | -> 4
| | -> <class 'busio.OneWire'>
| -> <module 'busio' from '/home/pi/.local/lib/python3.9/site-packages/busio.py'>
-> <adafruit_onewire.bus.OneWireBus object at 0xb613d388>
File "/home/pi/.local/lib/python3.9/site-packages/busio.py", line 503, in __init__
raise NotImplementedError("OneWire has not been implemented")
NotImplementedError: OneWire has not been implemented
Alles anzeigen
#!/usr/bin/python3
import re
import adafruit_ahtx0
import board
import schedule
import serial
import toml
from datetime import datetime
from pathlib import Path
from threading import Thread
from time import sleep
from gpiozero import DigitalOutputDevice
from loguru import logger
from RPLCD.i2c import CharLCD
from ds18b20 import DS18B20
LOG_FILE = Path("/home/pi/GreenHouse/logfile.log")
class GreenHouse:
def __init__(self, config, lcd, output_devices, aht_device, ds18b20):
self.time_control = None
self.humidity_control = None
self.earth_humidity = None
self.earth_temperature = None
self.air_humidity = None
self.air_temperature = None
self.config = config
self.lcd = lcd
self.output_devices = output_devices
self.aht_device = aht_device
self.ds18b20 = ds18b20
def control_fan_for_humidity(self):
while True:
self.get_value_aht()
if self.air_humidity is None:
sleep(1)
continue
if (
self.air_humidity
>= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_max"]
):
self.output_devices["luefter"].on()
self.update_display((3, 19), chr(4))
elif (
self.air_humidity
<= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_min"]
):
self.output_devices["luefter"].off()
self.update_display((3, 19), " ")
else:
self.update_display((3, 19), "ok")
sleep(5)
def control_fan_for_temperature(self):
self.get_value_aht()
if self.air_temperature is not None:
if (
self.air_temperature
>= self.config["Lufttemperatur"]["lufttemperatur_max"]
):
self.output_devices["luefter"].on()
self.update_display((2, 8), chr(4))
elif (
self.air_temperature
<= self.config["Lufttemperatur"]["lufttemperatur_min"]
):
self.output_devices["luefter"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_fan_for_time(self):
display_values = {(0, 9): chr(6), (0, 10): chr(7)}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
sleep(0.5)
if self.config["Zeitsteuerung"]["zeit_steuerung"] == "taeglich":
schedule.every().day.at(self.config["Zeitsteuerung"]["start_zeit_t"]).do(
self.output_devices["luefter"].on
)
schedule.every().day.at(self.config["Zeitsteuerung"]["end_zeit_t"]).do(
self.output_devices["luefter"].off
)
elif self.config["Zeitsteuerung"]["zeit_steuerung"] == "stündlich":
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["start_zeit_s"]
).do(self.output_devices["luefter"].on)
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["end_zeit_s"]
).do(self.output_devices["luefter"].off)
def control_heating_map(self):
self.get_value_ds18b20()
if self.earth_temperature is not None:
if self.earth_temperature <= self.config["Heizmatte"]["erd_temperatur_min"]:
self.output_devices["heizmatte"].on()
self.update_display((2, 8), chr(3))
elif (
self.earth_temperature >= self.config["Heizmatte"]["erd_temperatur_max"]
):
self.output_devices["heizmatte"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_light(self):
schedule.every().day.at(self.config["Lichtsteuerung"]["start_zeit_licht"]).do(
self.output_devices["licht"].on
)
schedule.every().day.at(self.config["Lichtsteuerung"]["end_zeit_licht"]).do(
self.output_devices["licht"].off
)
@logger.catch
def control_pump(self):
self.get_value_giesomat()
try:
if (
self.earth_humidity
<= self.config["Bewaesserung"]["erd_feuchtigkeit_min"]
):
self.output_devices["pumpe"].on()
self.update_display((3, 8), chr(3))
sleep(10)
self.output_devices["pumpe"].off()
elif (
self.earth_humidity
>= self.config["Bewaesserung"]["erd_feuchtigkeit_max"]
):
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
else:
self.update_display((3, 8), "ok")
except TypeError:
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
@logger.catch
def get_value_aht(self):
try:
self.air_humidity = round(self.aht_device.relative_humidity, 0)
self.air_temperature = round(self.aht_device.temperature, 0)
except RuntimeError:
self.air_humidity = self.air_temperature = None
@logger.catch
def get_value_ds18b20(self):
try:
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
if self.earth_temperature:
self.earth_temperature
else:
self.earth_temperature = None
except FileNotFoundError:
self.earth_temperature = None
@logger.catch
def get_value_giesomat(self):
try:
with serial.Serial("/dev/ttyUSB0", 57600, timeout=1) as connection:
sleep(3)
frequency = connection.readline().decode("utf8")
try:
self.earth_humidity = round(
(int(frequency) - self.config["Giesomat"]["hoechste_frequenz"])
/ (
self.config["Giesomat"]["niedrigste_frequenz"]
- self.config["Giesomat"]["hoechste_frequenz"]
)
* 100
)
except ValueError:
self.earth_humidity = None
except serial.SerialException:
self.earth_humidity = None
def start(self):
self.control_light()
if self.time_control:
self.control_fan_for_time()
elif self.humidity_control:
Thread(target=self.control_fan_for_humidity).start()
while True:
schedule.run_pending()
self.control_pump()
self.control_heating_map()
self.control_fan_for_temperature()
self.write_lcd_output()
sleep(1)
def setting_up_controlling(self):
if self.config["Luefter"]["steuerung_nach"] == "zeit":
self.time_control = True
self.humidity_control = False
elif self.config["Luefter"]["steuerung_nach"] == "luftfeuchtigkeit":
self.humidity_control = True
self.time_control = False
def update_display(self, cursor, text):
self.lcd.cursor_pos = cursor
self.lcd.write_string(text)
def write_lcd_output(self):
self.lcd.clear()
sensor_values = [
self.earth_humidity,
self.earth_temperature,
self.air_humidity,
self.air_temperature,
]
sensor_values = [
value if value is not None else "Fehler" for value in sensor_values
]
display_values = {
(0, 0): datetime.now().strftime("%d.%b"),
(0, 15): datetime.now().strftime("%H:%M"),
(1, 0): "--ERDE--- --LUFT---",
(3, 0): f"{chr(1)}{sensor_values[0]}%",
(2, 0): f"{chr(0)}{sensor_values[1]}{chr(2)}C",
(3, 11): f"{chr(1)}{sensor_values[2]}%",
(2, 11): f"{chr(0)}{sensor_values[3]}{chr(2)}C",
}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
if self.output_devices["licht"].value:
self.update_display((0, 12), chr(5))
else:
self.update_display((0, 12), " ")
def load_config_file():
return toml.loads(
Path.joinpath(Path(__file__).parent.absolute(), "greenhouse.conf").read_text()
)
def setup_lcd(lcd, config):
for number, symbol in enumerate(config["Symbole"]):
lcd.create_char(number, tuple(config["Symbole"][symbol]))
@logger.catch
def main():
logger.add(
LOG_FILE, backtrace=True, diagnose=True, format="{time:HH:mm:ss} {message}"
)
config = load_config_file()
lcd = CharLCD("PCF8574", 0x27)
try:
setup_lcd(lcd, config)
output_devices = {}
for device in config["Devices"]:
output_devices[device] = DigitalOutputDevice(
config["Devices"][device], active_high=False
)
i2c = board.I2C()
aht_device = adafruit_ahtx0.AHTx0(i2c, 0x38)
ds18b20 = sensor = DS18B20()
greenhouse = GreenHouse(config, lcd, output_devices, aht_device, ds18b20)
greenhouse.setting_up_controlling()
greenhouse.start()
except KeyboardInterrupt:
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(datetime.now().strftime("%d.%m.%y %H:%M:%S"))
lcd.cursor_pos = (3, 2)
lcd.write_string("Benutzerabbruch!")
sleep(3)
schedule.clear()
lcd.close(clear=True)
if __name__ == "__main__":
main()
Alles anzeigen
pi@raspberrypi:~ $ cd Desktop
pi@raspberrypi:~/Desktop $ python3 Test.py
2022-05-02 19:40:52.450 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:40:56.833 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:01.188 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:05.566 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:09.944 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:14.297 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:18.671 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:23.029 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:27.404 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:31.756 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:36.128 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:40.496 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:44.843 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:49.217 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:53.589 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:41:57.946 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:42:02.320 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:42:06.697 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
2022-05-02 19:42:11.051 | ERROR | __main__:control_heating_map:98 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3694), thread 'MainThread' (3069532544):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 284, in <module>
main()
-> <function main at 0xb60e0148>
File "/home/pi/Desktop/Test.py", line 270, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb619af58>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 191, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb619a808>
-> <__main__.GreenHouse object at 0xb60ff028>
> File "/home/pi/Desktop/Test.py", line 98, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb619ac40>
-> <__main__.GreenHouse object at 0xb60ff028>
File "/home/pi/Desktop/Test.py", line 154, in get_value_ds18b20
self.earth_temperature = round(ds18b20.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb60ff028>
NameError: name 'ds18b20' is not defined
^Cpi@raspberrypi:~/Desktop $
Alles anzeigen
#!/usr/bin/python3
import re
import adafruit_ahtx0
import board
import schedule
import serial
import toml
from datetime import datetime
from pathlib import Path
from threading import Thread
from time import sleep
from gpiozero import DigitalOutputDevice
from loguru import logger
from RPLCD.i2c import CharLCD
from ds18b20 import DS18B20
LOG_FILE = Path("/home/pi/GreenHouse/logfile.log")
class GreenHouse:
def __init__(self, config, lcd, output_devices, aht_device, ds18b20_device):
self.time_control = None
self.humidity_control = None
self.earth_humidity = None
self.earth_temperature = None
self.air_humidity = None
self.air_temperature = None
self.config = config
self.lcd = lcd
self.output_devices = output_devices
self.aht_device = aht_device
self.ds18b20_device = ds18b20_device
def control_fan_for_humidity(self):
while True:
self.get_value_aht()
if self.air_humidity is None:
sleep(1)
continue
if (
self.air_humidity
>= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_max"]
):
self.output_devices["luefter"].on()
self.update_display((3, 19), chr(4))
elif (
self.air_humidity
<= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_min"]
):
self.output_devices["luefter"].off()
self.update_display((3, 19), " ")
else:
self.update_display((3, 19), "ok")
sleep(5)
def control_fan_for_temperature(self):
self.get_value_aht()
if self.air_temperature is not None:
if (
self.air_temperature
>= self.config["Lufttemperatur"]["lufttemperatur_max"]
):
self.output_devices["luefter"].on()
self.update_display((2, 8), chr(4))
elif (
self.air_temperature
<= self.config["Lufttemperatur"]["lufttemperatur_min"]
):
self.output_devices["luefter"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_fan_for_time(self):
display_values = {(0, 9): chr(6), (0, 10): chr(7)}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
sleep(0.5)
if self.config["Zeitsteuerung"]["zeit_steuerung"] == "taeglich":
schedule.every().day.at(self.config["Zeitsteuerung"]["start_zeit_t"]).do(
self.output_devices["luefter"].on
)
schedule.every().day.at(self.config["Zeitsteuerung"]["end_zeit_t"]).do(
self.output_devices["luefter"].off
)
elif self.config["Zeitsteuerung"]["zeit_steuerung"] == "stündlich":
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["start_zeit_s"]
).do(self.output_devices["luefter"].on)
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["end_zeit_s"]
).do(self.output_devices["luefter"].off)
def control_heating_map(self):
self.get_value_ds18b20()
if self.earth_temperature is not None:
if self.earth_temperature <= self.config["Heizmatte"]["erd_temperatur_min"]:
self.output_devices["heizmatte"].on()
self.update_display((2, 8), chr(3))
elif (
self.earth_temperature >= self.config["Heizmatte"]["erd_temperatur_max"]
):
self.output_devices["heizmatte"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_light(self):
schedule.every().day.at(self.config["Lichtsteuerung"]["start_zeit_licht"]).do(
self.output_devices["licht"].on
)
schedule.every().day.at(self.config["Lichtsteuerung"]["end_zeit_licht"]).do(
self.output_devices["licht"].off
)
@logger.catch
def control_pump(self):
self.get_value_giesomat()
try:
if (
self.earth_humidity
<= self.config["Bewaesserung"]["erd_feuchtigkeit_min"]
):
self.output_devices["pumpe"].on()
self.update_display((3, 8), chr(3))
sleep(10)
self.output_devices["pumpe"].off()
elif (
self.earth_humidity
>= self.config["Bewaesserung"]["erd_feuchtigkeit_max"]
):
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
else:
self.update_display((3, 8), "ok")
except TypeError:
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
@logger.catch
def get_value_aht(self):
try:
self.air_humidity = round(self.aht_device.relative_humidity, 0)
self.air_temperature = round(self.aht_device.temperature, 0)
except RuntimeError:
self.air_humidity = self.air_temperature = None
@logger.catch
def get_value_ds18b20(self):
try:
self.earth_temperature = round(ds18b20_device.get_temperature(DS18B20.DEGREES_C), 1)
if self.earth_temperature:
self.earth_temperature
else:
self.earth_temperature = None
except FileNotFoundError:
self.earth_temperature = None
@logger.catch
def get_value_giesomat(self):
try:
with serial.Serial("/dev/ttyUSB0", 57600, timeout=1) as connection:
sleep(3)
frequency = connection.readline().decode("utf8")
try:
self.earth_humidity = round(
(int(frequency) - self.config["Giesomat"]["hoechste_frequenz"])
/ (
self.config["Giesomat"]["niedrigste_frequenz"]
- self.config["Giesomat"]["hoechste_frequenz"]
)
* 100
)
except ValueError:
self.earth_humidity = None
except serial.SerialException:
self.earth_humidity = None
def start(self):
self.control_light()
if self.time_control:
self.control_fan_for_time()
elif self.humidity_control:
Thread(target=self.control_fan_for_humidity).start()
while True:
schedule.run_pending()
self.control_pump()
self.control_heating_map()
self.control_fan_for_temperature()
self.write_lcd_output()
sleep(1)
def setting_up_controlling(self):
if self.config["Luefter"]["steuerung_nach"] == "zeit":
self.time_control = True
self.humidity_control = False
elif self.config["Luefter"]["steuerung_nach"] == "luftfeuchtigkeit":
self.humidity_control = True
self.time_control = False
def update_display(self, cursor, text):
self.lcd.cursor_pos = cursor
self.lcd.write_string(text)
def write_lcd_output(self):
self.lcd.clear()
sensor_values = [
self.earth_humidity,
self.earth_temperature,
self.air_humidity,
self.air_temperature,
]
sensor_values = [
value if value is not None else "Fehler" for value in sensor_values
]
display_values = {
(0, 0): datetime.now().strftime("%d.%b"),
(0, 15): datetime.now().strftime("%H:%M"),
(1, 0): "--ERDE--- --LUFT---",
(3, 0): f"{chr(1)}{sensor_values[0]}%",
(2, 0): f"{chr(0)}{sensor_values[1]}{chr(2)}C",
(3, 11): f"{chr(1)}{sensor_values[2]}%",
(2, 11): f"{chr(0)}{sensor_values[3]}{chr(2)}C",
}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
if self.output_devices["licht"].value:
self.update_display((0, 12), chr(5))
else:
self.update_display((0, 12), " ")
def load_config_file():
return toml.loads(
Path.joinpath(Path(__file__).parent.absolute(), "greenhouse.conf").read_text()
)
def setup_lcd(lcd, config):
for number, symbol in enumerate(config["Symbole"]):
lcd.create_char(number, tuple(config["Symbole"][symbol]))
@logger.catch
def main():
logger.add(
LOG_FILE, backtrace=True, diagnose=True, format="{time:HH:mm:ss} {message}"
)
config = load_config_file()
lcd = CharLCD("PCF8574", 0x27)
try:
setup_lcd(lcd, config)
output_devices = {}
for device in config["Devices"]:
output_devices[device] = DigitalOutputDevice(
config["Devices"][device], active_high=False
)
i2c = board.I2C()
aht_device = adafruit_ahtx0.AHTx0(i2c, 0x38)
ds18b20_device = DS18B20()
greenhouse = GreenHouse(config, lcd, output_devices, aht_device, ds18b20_device)
greenhouse.setting_up_controlling()
greenhouse.start()
except KeyboardInterrupt:
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(datetime.now().strftime("%d.%m.%y %H:%M:%S"))
lcd.cursor_pos = (3, 2)
lcd.write_string("Benutzerabbruch!")
sleep(3)
schedule.clear()
lcd.close(clear=True)
if __name__ == "__main__":
main()
Alles anzeigen
pi@raspberrypi:~ $ cd Desktop
pi@raspberrypi:~/Desktop $ python3 Test.py
2022-05-02 19:56:10.077 | ERROR | __main__:control_heating_map:99 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3862), thread 'MainThread' (3069880704):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 285, in <module>
main()
-> <function main at 0xb6135148>
File "/home/pi/Desktop/Test.py", line 271, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb61eff58>
-> <__main__.GreenHouse object at 0xb613cf58>
File "/home/pi/Desktop/Test.py", line 192, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb61ef808>
-> <__main__.GreenHouse object at 0xb613cf58>
> File "/home/pi/Desktop/Test.py", line 99, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb61efc40>
-> <__main__.GreenHouse object at 0xb613cf58>
File "/home/pi/Desktop/Test.py", line 155, in get_value_ds18b20
self.earth_temperature = round(ds18b20_device.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb613cf58>
NameError: name 'ds18b20_device' is not defined
2022-05-02 19:56:14.471 | ERROR | __main__:control_heating_map:99 - An error has been caught in function 'control_heating_map', process 'MainProcess' (3862), thread 'MainThread' (3069880704):
Traceback (most recent call last):
File "/home/pi/Desktop/Test.py", line 285, in <module>
main()
-> <function main at 0xb6135148>
File "/home/pi/Desktop/Test.py", line 271, in main
greenhouse.start()
| -> <function GreenHouse.start at 0xb61eff58>
-> <__main__.GreenHouse object at 0xb613cf58>
File "/home/pi/Desktop/Test.py", line 192, in start
self.control_heating_map()
| -> <function GreenHouse.control_heating_map at 0xb61ef808>
-> <__main__.GreenHouse object at 0xb613cf58>
> File "/home/pi/Desktop/Test.py", line 99, in control_heating_map
self.get_value_ds18b20()
| -> <function GreenHouse.get_value_ds18b20 at 0xb61efc40>
-> <__main__.GreenHouse object at 0xb613cf58>
File "/home/pi/Desktop/Test.py", line 155, in get_value_ds18b20
self.earth_temperature = round(ds18b20_device.get_temperature(DS18B20.DEGREES_C), 1)
| | | -> 1
| | -> <class 'ds18b20.DS18B20'>
| -> None
-> <__main__.GreenHouse object at 0xb613cf58>
NameError: name 'ds18b20_device' is not defined
Alles anzeigen
#!/usr/bin/python3
import re
import adafruit_ahtx0
import board
import schedule
import serial
import toml
from datetime import datetime
from pathlib import Path
from threading import Thread
from time import sleep
from gpiozero import DigitalOutputDevice
from loguru import logger
from RPLCD.i2c import CharLCD
from ds18b20 import DS18B20
LOG_FILE = Path("/home/pi/GreenHouse/logfile.log")
class GreenHouse:
def __init__(self, config, lcd, output_devices, aht_device, ds18b20_device):
self.time_control = None
self.humidity_control = None
self.earth_humidity = None
self.earth_temperature = None
self.air_humidity = None
self.air_temperature = None
self.config = config
self.lcd = lcd
self.output_devices = output_devices
self.aht_device = aht_device
self.ds18b20_device = ds18b20_device
def control_fan_for_humidity(self):
while True:
self.get_value_aht()
if self.air_humidity is None:
sleep(1)
continue
if (
self.air_humidity
>= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_max"]
):
self.output_devices["luefter"].on()
self.update_display((3, 19), chr(4))
elif (
self.air_humidity
<= self.config["Steuerung_nach_Luftfeuchte"]["luftfeuchte_min"]
):
self.output_devices["luefter"].off()
self.update_display((3, 19), " ")
else:
self.update_display((3, 19), "ok")
sleep(5)
def control_fan_for_temperature(self):
self.get_value_aht()
if self.air_temperature is not None:
if (
self.air_temperature
>= self.config["Lufttemperatur"]["lufttemperatur_max"]
):
self.output_devices["luefter"].on()
self.update_display((2, 8), chr(4))
elif (
self.air_temperature
<= self.config["Lufttemperatur"]["lufttemperatur_min"]
):
self.output_devices["luefter"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_fan_for_time(self):
display_values = {(0, 9): chr(6), (0, 10): chr(7)}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
sleep(0.5)
if self.config["Zeitsteuerung"]["zeit_steuerung"] == "taeglich":
schedule.every().day.at(self.config["Zeitsteuerung"]["start_zeit_t"]).do(
self.output_devices["luefter"].on
)
schedule.every().day.at(self.config["Zeitsteuerung"]["end_zeit_t"]).do(
self.output_devices["luefter"].off
)
elif self.config["Zeitsteuerung"]["zeit_steuerung"] == "stündlich":
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["start_zeit_s"]
).do(self.output_devices["luefter"].on)
schedule.every(self.config["Zeitsteuerung"]["jede_xte_std"]).hours.at(
self.config["Zeitsteuerung"]["end_zeit_s"]
).do(self.output_devices["luefter"].off)
def control_heating_map(self):
self.get_value_ds18b20()
if self.earth_temperature is not None:
if self.earth_temperature <= self.config["Heizmatte"]["erd_temperatur_min"]:
self.output_devices["heizmatte"].on()
self.update_display((2, 8), chr(3))
elif (
self.earth_temperature >= self.config["Heizmatte"]["erd_temperatur_max"]
):
self.output_devices["heizmatte"].off()
self.update_display((2, 8), " ")
else:
self.update_display((2, 8), "ok")
def control_light(self):
schedule.every().day.at(self.config["Lichtsteuerung"]["start_zeit_licht"]).do(
self.output_devices["licht"].on
)
schedule.every().day.at(self.config["Lichtsteuerung"]["end_zeit_licht"]).do(
self.output_devices["licht"].off
)
@logger.catch
def control_pump(self):
self.get_value_giesomat()
try:
if (
self.earth_humidity
<= self.config["Bewaesserung"]["erd_feuchtigkeit_min"]
):
self.output_devices["pumpe"].on()
self.update_display((3, 8), chr(3))
sleep(10)
self.output_devices["pumpe"].off()
elif (
self.earth_humidity
>= self.config["Bewaesserung"]["erd_feuchtigkeit_max"]
):
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
else:
self.update_display((3, 8), "ok")
except TypeError:
self.output_devices["pumpe"].off()
self.update_display((3, 8), " ")
@logger.catch
def get_value_aht(self):
try:
self.air_humidity = round(self.aht_device.relative_humidity, 0)
self.air_temperature = round(self.aht_device.temperature, 0)
except RuntimeError:
self.air_humidity = self.air_temperature = None
@logger.catch
def get_value_ds18b20(self):
try:
self.earth_temperature = round(self.ds18b20_device.get_temperature(DS18B20.DEGREES_C), 1)
if self.earth_temperature:
self.earth_temperature
else:
self.earth_temperature = None
except FileNotFoundError:
self.earth_temperature = None
@logger.catch
def get_value_giesomat(self):
try:
with serial.Serial("/dev/ttyUSB0", 57600, timeout=1) as connection:
sleep(3)
frequency = connection.readline().decode("utf8")
try:
self.earth_humidity = round(
(int(frequency) - self.config["Giesomat"]["hoechste_frequenz"])
/ (
self.config["Giesomat"]["niedrigste_frequenz"]
- self.config["Giesomat"]["hoechste_frequenz"]
)
* 100
)
except ValueError:
self.earth_humidity = None
except serial.SerialException:
self.earth_humidity = None
def start(self):
self.control_light()
if self.time_control:
self.control_fan_for_time()
elif self.humidity_control:
Thread(target=self.control_fan_for_humidity).start()
while True:
schedule.run_pending()
self.control_pump()
self.control_heating_map()
self.control_fan_for_temperature()
self.write_lcd_output()
sleep(1)
def setting_up_controlling(self):
if self.config["Luefter"]["steuerung_nach"] == "zeit":
self.time_control = True
self.humidity_control = False
elif self.config["Luefter"]["steuerung_nach"] == "luftfeuchtigkeit":
self.humidity_control = True
self.time_control = False
def update_display(self, cursor, text):
self.lcd.cursor_pos = cursor
self.lcd.write_string(text)
def write_lcd_output(self):
self.lcd.clear()
sensor_values = [
self.earth_humidity,
self.earth_temperature,
self.air_humidity,
self.air_temperature,
]
sensor_values = [
value if value is not None else "Fehler" for value in sensor_values
]
display_values = {
(0, 0): datetime.now().strftime("%d.%b"),
(0, 15): datetime.now().strftime("%H:%M"),
(1, 0): "--ERDE--- --LUFT---",
(3, 0): f"{chr(1)}{sensor_values[0]}%",
(2, 0): f"{chr(0)}{sensor_values[1]}{chr(2)}C",
(3, 11): f"{chr(1)}{sensor_values[2]}%",
(2, 11): f"{chr(0)}{sensor_values[3]}{chr(2)}C",
}
for cursor in display_values:
self.update_display(cursor, display_values[cursor])
if self.output_devices["licht"].value:
self.update_display((0, 12), chr(5))
else:
self.update_display((0, 12), " ")
def load_config_file():
return toml.loads(
Path.joinpath(Path(__file__).parent.absolute(), "greenhouse.conf").read_text()
)
def setup_lcd(lcd, config):
for number, symbol in enumerate(config["Symbole"]):
lcd.create_char(number, tuple(config["Symbole"][symbol]))
@logger.catch
def main():
logger.add(
LOG_FILE, backtrace=True, diagnose=True, format="{time:HH:mm:ss} {message}"
)
config = load_config_file()
lcd = CharLCD("PCF8574", 0x27)
try:
setup_lcd(lcd, config)
output_devices = {}
for device in config["Devices"]:
output_devices[device] = DigitalOutputDevice(
config["Devices"][device], active_high=False
)
i2c = board.I2C()
aht_device = adafruit_ahtx0.AHTx0(i2c, 0x38)
ds18b20_device = DS18B20()
greenhouse = GreenHouse(config, lcd, output_devices, aht_device, ds18b20_device)
greenhouse.setting_up_controlling()
greenhouse.start()
except KeyboardInterrupt:
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(datetime.now().strftime("%d.%m.%y %H:%M:%S"))
lcd.cursor_pos = (3, 2)
lcd.write_string("Benutzerabbruch!")
sleep(3)
schedule.clear()
lcd.close(clear=True)
if __name__ == "__main__":
main()
Alles anzeigen
Schaut gut aus, er geht jetzt auch ich lasse es jetzt mal laufen und sende dir Morgen Früh ein Video was noch nicht so geht wie es von dir gedacht. (Nacht Schicht
Morgen hier das Video, zur deiner Info die Heizung ist an aber das Licht nicht.
eine Frage von meinem Behinderten Bruder er bastelt gerade etwas und das IDE Programm sucht #include <OpenWire.h> ich kenne und finde sie nicht kanst du Ihm da ein Rat geben
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!