Hallo zusammen,
um die Laufzeiten meines Ölbrenners zu loggen verwende ich das folgende Skript:
Python
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import MySQLdb
from datetime import datetime
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# GPIO definieren
switch_brenner = 21
# definierten GPIO als Eingang setzen
GPIO.setup(switch_brenner, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Datenbankverbindung
db = MySQLdb.connect(host="192.168.xxx.xxx", user="xxxx", passwd="xxxxx", db="brenner")
timestamp1 = 0
while True:
status = GPIO.input(switch_brenner) #(0 oder 1)
#print(status)
#print(timestamp1)
if status == 0 and timestamp1 == 0:
#print("Kontakt geschlossen" )
i = datetime.now()
timestamp1 = i.strftime('%Y-%m-%d %H:%M:%S')
#print(timestamp1)
if status == 1 and timestamp1 != 0:
i2 = datetime.now()
timestamp2 = i2.strftime('%Y-%m-%d %H:%M:%S')
#print("Kontakt offen")
#print(timestamp2)
t1 = datetime.strptime(timestamp1, "%Y-%m-%d %H:%M:%S")
t2 = datetime.strptime(timestamp2, "%Y-%m-%d %H:%M:%S")
difference = t2 - t1 #
diffdelta = difference.total_seconds().__int__()
#print(timestamp1)
#print(timestamp2)
#print(diffdelta)
#Datensatz in Datenbank eintragen
cursor = db.cursor()
cursor.execute("INSERT INTO runtime (startzeit,endzeit,laufzeit) VALUES (%s,%s,%s)",(timestamp1,timestamp2,diffdelta,))
db.commit()
cursor.close()
timestamp1 = 0
time.sleep(0.5)
Alles anzeigen
Wenn ich es per Hand ausführe, läuft es wunderbar und tut was es soll. Ebenso wenn ich es mit "at now" zum werkeln in den Hintergrund schicke. Aber sobald ich das Skript per crontab oder rc.local beim Systemstart ausführen lasse, dann läuft es zwar im Hintergrund, wird also korrekt gestartet, tut aber nichts. Zumindest nichts sichtbares, wie z.B. die Laufzeiten in die DB zu schreiben, wofür es ja eigentlich da ist. Wo kann hier der Fehler liegen?