Jump to content

Recommended Posts

Geschrieben

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

Geschrieben

Das passiert dann wenn eine Nachricht von einem Gerät kommt, dass in euren Bindings nicht bekannt ist. Gibt es Bricks/Bricklets die zwar angeschlossen, aber nicht geadded wurden? (Master-Brick villt?)

Geschrieben

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?

 

Der Loetkolben

Geschrieben

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.

Geschrieben

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.

Geschrieben

Naja, wenn es eh ignoriert wird braucht man die Fehlermeldung glaub ich nicht oder? Andererseits kann sie auch drin bleiben und man ignoriert sie. Könnte man in die Dokumentation mit rein schreiben

Geschrieben

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.

Geschrieben

 

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

Geschrieben

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)

Geschrieben
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

Join the conversation

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

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...