2 - Callback-Funktionen¶
Häufig möchte man jedoch nicht nur eine Messung machen, sondern in regelmässigen Intervallen. Oder man möchte den Sensor um etwas zu überwachen und falls ein gewisser Wert über- oder unterschritten wird, soll etwas ausgelöst werden.
In Tinkerforge kann man das relativ einfach erreichen. Man kann sogenannte Callback-Funktionen definieren. Das sind Funktionen, welche unter bestimmten Umständen aufgrund einer Messung eines Sensors aufgerufen werden. Im Falle des Temperature-Bricklets wird die Callback-Funktion wie folgt eingerichtet:
Callback-Funktionen registrieren und definieren
# Callback-Funktion registrieren
tempBricklet.register_callback(tempBricklet.CALLBACK_TEMPERATURE, tempCallback)
# Genaue Angaben, wann die Callbackfunktion aufgerufen werden soll
tempBricklet.set_temperature_callback_configuration(1000, False, "x", 0, 0)
Beide Funktionen müssen im Hauptprogramm nach der Initialiserung aufgerufen werden:
tempBricklet.register_callback(tempBricklet.CALLBACK_TEMPERATURE, tempCallback)
richtet eine Callback-Funktion ein, wobei
tempBricklet.CALLBACK_TEMPERATURE
die Temperatur ist, welche an die Callback-Funktion übergeben wird. Das kann immer so übernommen werden.tempCallback
die Callback-Funktion ist, welche dann aufgerufen werden soll. Der Name kann hier natürlich ändern, je nachdem welche Funktion man aufrufen will.
tempBricklet.register_callback(tempBricklet.CALLBACK_TEMPERATURE, tempCallback)
Damit setzt man die Bedingungen, wann die Callback-Funktion, welche oben definiert wurde, aufgerufen wird. Mit diesen Einstellungen wird die Funktion tempCallback
jede Sekunde aufgerufen. Mehr Details gibt auf den Seiten zu den einzelnen Bricklets, z.B. dem Temperature-Bricklet.
Schauen wir uns das an einem ganzen Programm an. Wir messen damit jede Sekunde die Temperatur und geben Sie auf dem Bildschirm aus:
simpleCallback.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Adressierung
HOST = "localhost"
PORT = 4223
temperatureBrickletUID = "KF7" # UID aus dem Brick Viewer
# Import der Funktionen
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_temperature_v2 import BrickletTemperatureV2
# Verbindung herstellen
ipcon = IPConnection()
tempBricklet = BrickletTemperatureV2(temperatureBrickletUID, ipcon)
ipcon.connect(HOST, PORT)
# Die Callback-Funktion
# Diese muss vor den Registrierungen im Code kommen
def tempCallback(temperature):
print("Temperature: " + str(temperature/100.0) + " °C")
# Callback-Funktion registrieren
tempBricklet.register_callback(tempBricklet.CALLBACK_TEMPERATURE, tempCallback)
# Genaue Angaben, wann die Callbackfunktion aufgerufen werden soll
tempBricklet.set_temperature_callback_configuration(1000, False, "x", 0, 0)
# Programm wird beendet, wenn eine beliebige Taste gedrückt wird
input("Press key to exit\n")
ipcon.disconnect()#!/usr/bin/env python