Jump to content

Callback-Problem mit TemperatureBricklet


Recommended Posts

Tag zusammen,

 

folgendes kleines Script arbeitet prima für die Feuchte-, Druck- und Licht-Bricklets -- nur mit dem Temperatur-Bricklet gibt es "Aussetzer":

 

from functools import partial
from time import sleep, time

from tinkerforge.bricklet_ambient_light import AmbientLight
from tinkerforge.bricklet_barometer import Barometer
from tinkerforge.bricklet_humidity import BrickletHumidity
from tinkerforge.bricklet_temperature import Temperature
from tinkerforge.ip_connection import IPConnection


def cb_gen(what, val):
    print '%6.4f %s %s' % (time() - start, what, val)


REPEAT = 500

conn = IPConnection()
conn.connect('localhost', 4223)

try:
    light = AmbientLight('i9K', conn)
    bar = Barometer('fTv', conn)
    hum = BrickletHumidity('hR7', conn)
    temp = Temperature('dPm', conn)
    temp.set_response_expected_all(True)

    start = time()
    light.register_callback(
        light.CALLBACK_ILLUMINANCE, partial(cb_gen, 'illum'))
    bar.register_callback(
        bar.CALLBACK_AIR_PRESSURE, partial(cb_gen, 'press'))
    hum.register_callback(
        hum.CALLBACK_HUMIDITY, partial(cb_gen, 'humid'))
    temp.register_callback(
        temp.CALLBACK_TEMPERATURE, partial(cb_gen, '--------temp '))
    light.set_illuminance_callback_period(REPEAT)
    bar.set_air_pressure_callback_period(REPEAT)
    hum.set_humidity_callback_period(REPEAT)
    temp.set_temperature_callback_period(REPEAT)

    sleep(10)
finally:
    conn.disconnect()

 

Beispiel-Output:

 

0.0276 --------temp  2137
0.1046 press 997716
0.2777 humid 400
0.3774 illum 778
0.5280 --------temp  2131
0.6047 press 997715
0.7778 humid 399
0.8776 illum 774
1.1047 press 997716
1.2778 --------temp  2137
1.3777 illum 776
1.4777 humid 398
1.6048 press 997713
1.8774 illum 775
2.1049 press 997711
2.1777 humid 400
2.3779 illum 776
2.6049 press 997707
2.6779 humid 397
2.9278 illum 778
3.1048 press 997708
3.1778 humid 398
3.4279 illum 776
3.6779 humid 399
3.9779 illum 777
4.0251 press 997707
4.1779 humid 398
4.2780 --------temp  2131
4.4779 illum 776
4.7780 --------temp  2137
4.8050 press 997706
4.8779 humid 399
4.9780 illum 777
5.3252 press 997705
5.3780 humid 398
5.4780 illum 776
5.8250 press 997704
5.9780 humid 400
6.0281 illum 775
6.3251 press 997707
6.5281 illum 777
6.5781 humid 397
6.8251 press 997705
7.0284 illum 775
7.0781 humid 399
7.3251 press 997706
7.5282 --------temp  2131
7.5781 humid 398
7.6281 illum 774
7.8251 press 997707
8.0282 --------temp  2137
8.0782 humid 400
8.1281 illum 775
8.3251 press 997705
8.5780 humid 399
8.6782 illum 774
8.8252 press 997706
9.0782 humid 400
9.2282 illum 775
9.3253 press 997704
9.5783 humid 399
9.8783 illum 774
10.0054 press 997705

 

Wie zusehen, werden Helligkeit, Feuchte und Druck sehr regelmäßig ausgegeben -- nur die Temperaturdaten fehlen recht häufig.

 

Hab verschiedene Varianten probiert: Kabel gewechselt, Stecker am Master Brick gewechselt, und auch mal einen StepperBrick gewechselt (mit modifiziertem Script -- ohne die anderen Bricklets). Das Problem bleibt.

 

(Nebenbei: Ich weiß, dass es eigentlich Unsinn ist, solche phyiskalischen Größen sooo häufig zu messen -- aber zum Testen ist das unterhaltsamer als Minuten zu warten ;)

 

[Edit] Was ich vergessen habe: der MasteBrick hat FW 2.1.2, das TemperatureBricklet die FW Version 2.0.0

Link zu diesem Kommentar
Share on other sites

Hallo adeuring.

 

Versuche doch mal alles auf den aktuellen Stand zu bringen. Der Brickviewer macht das fuer die Brickelts in einem Rutsch.

 

Changelog Temperatur Bricklet:

1.0.0: Initial version
1.1.0: Add support for tick types
1.1.1: Use timeout for i2c mutex, otherwise Temperature Bricklet does not work with IMU Brick
2.0.0: Support for protocol 2.0
2.0.1: Add I2C Mode switch API
2.0.2: Fix wrong length for GetDebounce packet (through brickletlib)

 

Ich weiss nicht ob das hilft, aber es koennte ein Anfang sein.  ;)

 

 

Der Loetkolben

Link zu diesem Kommentar
Share on other sites

Gutan Abend loetkolben,

 

Hallo adeuring.

 

Versuche doch mal alles auf den aktuellen Stand zu bringen. Der Brickviewer macht das fuer die Brickelts in einem Rutsch.

 

Changelog Temperatur Bricklet:

1.0.0: Initial version
1.1.0: Add support for tick types
1.1.1: Use timeout for i2c mutex, otherwise Temperature Bricklet does not work with IMU Brick
2.0.0: Support for protocol 2.0
2.0.1: Add I2C Mode switch API
2.0.2: Fix wrong length for GetDebounce packet (through brickletlib)

 

Ich weiss nicht ob das hilft, aber es koennte ein Anfang sein.  ;)

 

 

Der Loetkolben

 

Danke, gute Idee -- hat leider nix gehlfeen. Aber das Bricklet ist jetzt auf FW 2.02

 

Link zu diesem Kommentar
Share on other sites

Callbacks bekommst du nur wenn sich der Wert ändert. Die Period gibt die minimale Zeit zwischen zwei Callbacks an. Eine Period von 500 heißt nicht, dass du immer alle 500ms einen Callback bekommst.

 

Im Zeifelsfall ist die Temperatur einfach recht stabil im Verhältnis zu den anderen Werten. Soll heißen, dass funktioniert alles wie erwartet.

Link zu diesem Kommentar
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.

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