Jump to content

[Python] keine Sensorwerte mehr


Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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()

 

 

 

Link to comment
Share on other sites

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()

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...