Hallo zusammen,
ich möchte gerne alle 10 Minuten in einer Datenbank auf dem Raspberry einen Wert abfragen. Das mache ich wieder über systemd, also in /etc/systemd/system einen neuen Dienst mit folgendem Inhalt erstellet:
Code
[Unit]
Description=wkz Service
After=network.target
[Service]
Type=idle
User=pi
ExecStart=/usr/bin/python3 /home/pi/wkz.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Alles anzeigen
Wenn dann dieser Wert einen bestimmten vordefinierten Wert übersteigt, dann soll eine LED angehen, angeschlossen am GPIO17. Ich bin jetzt nur auf die Lösung gekommen, die funktioniert
Inhalt Datei wkz.py:
Python
#!/usr/bin/env python3
import mysql.connector
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
db = mysql.connector.connect(
host="localhost", # Servername
user="****", # Benutzername
password="****", # Passwort
database="wkzba"
)
cursor = db.cursor()
abfrage="SELECT service from manuell"
cursor.execute(abfrage)
service = cursor.fetchone()
service = int(service[0])
if service > 100:
led.on()
else:
led.off()
cursor.close()
db.close()
sleep(600)
Alles anzeigen
Funktioniert auch soweit, nur wenn ich mir den Code anschaue, den Dennis89 mir hier gemacht hat, ist meine Lösung sicher nicht die Beste....
Python
#!/usr/bin/env python3
from contextlib import closing
from signal import pause
import mysql.connector
from gpiozero import Button, CPUTemperature
HOST = "****"
USER = "****"
PASSWORD = "****"
DATABASE = "****"
@contextmanager
def setup_connection():
data_base_connection = mysql.connector.connect(
host=HOST,
user=USER,
password=PASSWORD,
database=DATABASE)
try:
yield data_base_connection
finally:
data_base_connection.close()
def write_in_database():
temperature = read_cpu_temperature()
with setup_connection() as connection:
try:
with connection.cursor() as cursor:
cursor.execute(
"UPDATE **** SET zaehler=zaehler+1, temp = %s WHERE id = %s",
(temperature, 1),
)
except Exception:
connection.rollback()
raise
else:
connection.commit()
def read_cpu_temperature():
return round(CPUTemperature().temperature, 1)
def main():
button = Button(25, pull_up=False, hold_time=0.3)
button.when_held = write_in_database
pause()
if __name__ == "__main__":
main()
Alles anzeigen
Wäre super, wenn mir jemand einen tipp geben könnte, wie ich meinen Code verbessern könnte.
Danke
Gruß
Tamia