Jump to content

Python, nur ab und zu: "Message with unknown Stack ID, discarded: (2, 8)"


Recommended Posts

Hallo zusammen,

 

ich lese mit dem "temperatur/example_simple.py" Script alle 3 Sekunden* das Bricklet via Netzwerk aus. Ab und zu, vielleicht alle 5 Minuten, aber auch mal 2 mal pro Minute, kommt diese Fehlermeldung:

 

"Message with unknown Stack ID, discarded: (2, 8 )" - Zwischen 8 und ) kein Leerzeichen  ;)

 

Wieso und warum? Was bedeutet das und vor allen wie kann man das vermeiden?

 

 

Der Loetkolben

 

* while true ; do ./example_simple.py ; sleep 3 ; done

 

20.5
20.5
20.56
20.5
20.56
Message with unknown Stack ID, discarded: (2, 
20.56
20.56
20.5
20.5
20.5

Link to comment
Share on other sites

Die Meldung bedeutet, dass die IPConnection eine Nachricht mit Function ID 8 (das ist der Temperature.CALLBACK_TEMPERATURE) vom Stackteilnehmer 2 (das wird wohl das Temperature Bricklet sein) erhalten hat. Aber es kennt keinen Stackteilnehmer 2, daher "unknown Stack ID".

 

Hast du den Brick Viewer auf und den Tab für das Temperature Bricklet aktiv? Dann hat der Brick Viewer den Temperature.CALLBACK_TEMPERATURE Callback für das Bricklet aktiviert und es sendet Callbacks.

 

Wenn du nun dein Script startest dann gibt es ein kleines Zeitfenster zwischen der Erzeugung der IPConnection und dem add_device Aufruf. In dieser Zeit empfängt die IPConnection schon eingehende Nachrichten kennt aber das Temperature Bricklet noch nicht.

 

Du kannst diese Meldung vermeiden indem du brickv oder wer auch immer den Temperature.CALLBACK_TEMPERATURE Callback aktiviert hat schliesst. Oder du kannst die Schleife in das Python Script einbauen, so dass du nicht immer die IPConnection neu erstellst.

 

Aber eigentlich könnte ich diese Meldung auch aus allen Bindings entfernen. Callbacks/Antworten von unbekannten Devices werden eh ignoriert.

Link to comment
Share on other sites

Ja, ist ein Masterbrick mit 3 verschiedenen Bricklets.

 

Verstehe aber (noch) nicht. Habe nur das Samplescript angepasst (Meine UID und Textanpassungen) und dann laufen lassen?

 

Wo sollte man was "adden" muessen?

 

Du musst da nichts "adden", UID ändern und Beispiel muss funktionieren, tut es ja auch :)

 

Die Meldung deutet nicht auf ein Problem oder Fehler hin, sondern nur das die IPConnection etwas unerwartetes empfangen hat und es ignoriert hat.

Link to comment
Share on other sites

Ich werde die Meldung entfernen, den sie hat keinen Mehrwert und stiftet nur Verwirrung wie dieser Thread beweist :)

 

Außerdem werden Callbacks/Antworten mit unbekannter Function ID eh schon stillschweigend ignoriert.

Link to comment
Share on other sites

 

Ja, so sehe ich das auch, denn wenn ich die Messwerte empfange/ablege und dann weiterverarbeite, erwarte ich an dieser Stelle einen Zahl mit 2 Vorkomma und max. 2 Nachkommastellen.

 

Fehlerhandling finde ich natuerlich gut, aber dass sollte ueber eine eigene Variable/Funktion abgeprueft werden koennen, also nicht "InlineDataErrorHandling"  ;)

 

BTW: Was kommt eigentlich bei genau 20 Grad fuer ein Anzeigewert? "20", "20." oder "20.0"? Warum kann es eigentlich nicht immer 4 stellig sein, also auch "20,50"?

 

Danke

 

Der Loetkolben

Link to comment
Share on other sites

Loetkolben, wie gesagt ist das kein Fehler und die Meldung daher keine Fehlermeldung :)

 

Zu der 20 Frage:

 

$ python -c 'print str(20.00)'
20.0

 

Wenn du da ein spezielles Ausgabeformat brauchst dann kannst du einfach das Python Script anpassen. Da du eh schon aus

 

print('Temperature: ' + str(temperature) + ' °C')

 

den Text entfernt hast kannst du das Beispiel ja auch noch weiter anpassen. Immer 2 Nachkommastellen bekommst du so:

 

print('%.2f' % temperature)

Link to comment
Share on other sites

das kein Fehler und die Meldung daher keine Fehlermeldung

 

Hmmm, aber die Meldung kommt schon arg unerwartet an dieser Stelle, insbesondere wenn man die Zahlen weiterverarbeiten will.  :)

 

Danke auch fuer die schnelle Python Outputformatierung. BTW, fuer die Scriptverarbeitung ist folgendes noch wichtig:

 

Output mit "CR" am Ende.

print(str(temperature))

 

Output ohne "CR" am Ende.

import sys
sys.stdout.write(str(temperature))

 

Der Loetkolben

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...