@BlackJack: Besten Dank, habe ich das dann so richtig umgesetzt?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from contextlib import closing
from itertools import groupby
from threading import Thread
from threading import Lock
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='',
user='',
passwd='',
db='')
) as connection:
connection.cursor().execute(
'INSERT INTO S0_Zaehler_01(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)
class Counter(object):
def __init__(self,value=0):
self.value = value
self.lock = Lock()
def increase(self):
with self.lock:
self.value += 1
def get_and_reset(self):
with self.lock:
result = self.value
self.value = 0
return result
def write_leading_edge_count(count):
intervall = 5
timestamp = int(time.time() / intervall) * intervall
while True:
timestamp += intervall
time.sleep(max(0, timestamp-time.time()))
leading_edge_count = count.get_and_reset()
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(count):
thread = Thread(target=write_leading_edge_count, args=(count,))
thread.setDaemon(True)
thread.start()
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()
count = Counter()
start_writer(count)
for value in iter_changes(100):
if value == 1:
count.increase()
blink_led()
if __name__ == '__main__':
main()
Funktioniert auf jeden Fall! Ich frage dann noch alle Fehler beim Verbinden zur MySQL ab und sende, falls ein Fehler auftritt, diesen über ein SMTP Modul an einen Emailempfänger. Code dazu folgt
Danke!