Hey Leute, das ist mein ganzes Skript, um mal die Zusammenhänge erkennen zu lassen. Falls etwas auffällt, das man anders bzw. besser gestalten könnte, immer her damit. Zur Info, das Skript überwacht einen digitalen Eingang eines Mikrocontrollers und schreibt, falls HIGH-Werte anfallen, diese gesammelt über ein entsprechendes Zeitintervall in eine Datenbank.
Das Skript sollte dann, momentan noch ein Watchdog, über deamontools überwacht und am Leben gehalten werden.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import os
from contextlib import closing
from itertools import groupby
from threading import Thread
from time import sleep
import MySQLdb as db
import pifacedigitalio as piface
def insert_into_database(timestamp, date, time, amount):
with closing(
db.connect(
host='localhost',
user='',
passwd='',
db='')
) as connection:
connection.cursor().execute(
'INSERT INTO Tabelle(Zeitstempel, Datum, Zeit, Impulsanzahl) VALUES (%s, %s, %s, %s)',
(timestamp, date, time, amount)
)
connection.commit()
def blink_led():
piface.digital_write(0,1)
sleep(0.1)
piface.digital_write(0,0)
def write_leading_edge_count(leading_edges):
intervall = 300
timestamp = int(time.time() / intervall) * intervall
while True:
timestamp += intervall
time.sleep(max(0, timestamp-time.time()))
leading_edge_count = len(leading_edges)
del leading_edges[:]
reset_logfile()
datum = str(time.strftime("%d-%m-%Y"))
uhrzeit = str(time.strftime("%H:%M:%S"))
insert_into_database(timestamp, datum, uhrzeit, leading_edge_count)
def start_writer(leading_edges):
thread = Thread(target=write_leading_edge_count, args=(leading_edges,))
thread.setDaemon(True)
thread.start()
def write_into_logfile(value):
with open('logfile','r') as lf:
lines = lf.readlines()
lines.insert(0,str(value))
with open('logfile' + '.new','w') as lfn:
lfn.writelines(lines)
os.rename('logfile' + '.new', 'logfile')
def read_logfile(liste):
with open('logfile','r') as lf:
chars = lf.read()
liste.extend(list(chars))
def reset_logfile():
with open('logfile','r+') as lf:
lf.truncate()
def iter_values(frequency):
while True:
yield piface.digital_read(0)
sleep(1.0 / frequency)
def iter_changes(frequency):
for value, _ in groupby(iter_values(frequency)):
yield value
def main():
piface.init()
leading_edges = list()
read_logfile(leading_edges)
start_writer(leading_edges)
for value in iter_changes(100):
if value == 1:
leading_edges.append(1)
write_into_logfile(1)
blink_led()
if __name__ == '__main__':
main()
Gruß
mobby