fedex Geschrieben November 16, 2015 at 13:09 Geschrieben November 16, 2015 at 13:09 Wenn 2 Minuten lang keine Änderungen der Sensorwerte mehr sind, dann werden die Daten nicht mehr an den MQTT Broker gepublisht, obwohl das Programm auf dem Red Brick noch läuft. Erst wenn man das Programm stoppt und neu startet werden wieder Daten gesendet. Ich publishe die Parameter der Callbacks. Hat jemand eine Idee woran das liegen könnte? Zitieren
photron Geschrieben November 16, 2015 at 14:33 Geschrieben November 16, 2015 at 14:33 Wird der Callback denn noch aufgerufen? Verwendest du vielleicht einen MQTT Broker der nach 2 Minuten Schweigen dein Verbindung trennt? Zitieren
fedex Geschrieben November 17, 2015 at 07:29 Autor Geschrieben November 17, 2015 at 07:29 Ich gehe davon aus das der Callback noch aufgerufen wird, da mein example_Callback Skript auf dem Red Brick noch auf "running" steht. Ich benutze den Mosquitto Broker. Nach ca. 2 Minuten nachdem der Broker keine Werte mehr bekommen hat, bekommt er, sobald dann wieder Werte gesendet werden, keine mehr. Nach einem Pingreq vom Broker bekommt er direkt ein Pingresp, daher sollte die Verbindung ja noch vorhanden sein. Zitieren
fedex Geschrieben November 17, 2015 at 07:59 Autor Geschrieben November 17, 2015 at 07:59 Mit meiner Python Shell Konsole kommt die folgende Fehlermeldung: [Errno 10053] Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen Mein Skript sieht so aus: #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "10.208.216.149" PORT = 4223 UID = "tKm" # Change to your UID import paho.mqtt.client as mqtt from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_distance_ir import DistanceIR def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # Callback function for distance callback (parameter has unit mm) def cb_distance(distance): client.publish("tinkerforge/bricklet/distance/tKm/distance", str(distance/10.0)) if __name__ == "__main__": ipcon = IPConnection() # Create IP connection dir = DistanceIR(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected client = mqtt.Client() client.on_connect = on_connect client.connect("vmiot01srv", 1883, 60) # Set period for distance callback to 0.2s (200ms) # Note: The distance callback is only called every 0.2 seconds # if the distance has changed since the last call! dir.set_distance_callback_period(200) # Register distance callback to function cb_distance dir.register_callback(dir.CALLBACK_DISTANCE, cb_distance) raw_input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect() Zitieren
photron Geschrieben November 17, 2015 at 10:22 Geschrieben November 17, 2015 at 10:22 Deinem Script fehlt der Aufruf einer der verschiedenen Client Loop Funktionen: https://pypi.python.org/pypi/paho-mqtt#network-loop Dadurch funktioniert dein Skript mehr oder weniger nur zufällig und daher kommt auch das 2 Minuten Problem. Ersetze in deinem Skript raw_input('Press key to exit\n') # Use input() in Python 3 z.B. durch client.loop_forever() Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.