Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

Hi,

 

gibt es eine Moeglichkeit, festzustellen wann die EnumerateCallbacks momentan angeschlossener Bricks und Bricklets komplett sind?

 

Hintergrund dieser Frage ist ein Rechner auf dem eine Menge Bauelemente angeschlossen ist (oder auch einige nicht oder gar keine) und ein Programm, das aber beim Start relativ frueh wissen moechte, was vorhanden ist und was nicht. Sinnlose Sleeps einbauen will ich aber auch nicht ...

 

Danke fuer Euer Feedback!

Geschrieben

Leider nicht, diese Information ist im System nicht vorhanden.

 

Der Master eines Stacks baut sich Stück für Stück dynamisch eine Routing-Tabelle auf, wie viele Stapelteilnehmer er in Summe wirklich hat weiß er auch nicht.

 

Wenn dein System per USB angeschlossen ist kannst du aber mit relativ kleinen Timeouts arbeiten (50-100ms oder sowas).

Geschrieben
  • Autor

Schade, das hab ich fast befuerchtet - 50-100ms total oder pro potentiell installiertem Baustein?

 

Danke!

Geschrieben

Ich dachte jetzt das man nach jedem Enumerate eines Bricks/Bricklets einen 50ms Timer startet bzw neustartet und wenn der Timer auslöst ist die Enumerierung vorbei.

 

D.h. es dauert dann in Summe solange wie die Enumerierung dauert plus 50ms für den Timeout.

Geschrieben

Da die Frage schon öfter gestellt wurde hab ich mal ein kleines Beispiel geschrieben dafür (in Python):

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

HOST = "localhost"
PORT = 4223

from tinkerforge.ip_connection import IPConnection
import threading

class Enumerator:
    WAIT_TIME = 0.1
    uids = []
    lock = threading.Lock()

    def __init__(self, ipcon):
        ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE, self.cb_enumerate)

        self.timer = threading.Timer(Enumerator.WAIT_TIME, self.lock.release)
        self.timer.start()

        ipcon.enumerate()
           
        self.lock.acquire()
        self.lock.acquire()

    def cb_enumerate(self, uid, connected_uid, position, hardware_version, 
                     firmware_version, device_identifier, enumeration_type):
        self.timer.cancel()

        if not uid in self.uids:
            self.uids.append(uid)

        self.timer = threading.Timer(Enumerator.WAIT_TIME, self.lock.release)
        self.timer.start()

if __name__ == "__main__":
    ipcon = IPConnection()
    ipcon.connect(HOST, PORT)

    enumerator = Enumerator(ipcon)
    print enumerator.uids

    ipcon.disconnect()

 

Ausgabe:

olaf@pc:~# python enumerate_all.py
['5W6gHB', '6JLUGS', '6kqhAN', '6QGtV5', '6QENvq', '5W5BYn', '6Kvxz4', '631cHu']

 

Wenn keiner Verbesserungsvorschläge hat füge ich das inkl. Beschreibung der Dokumentation hinzu.

Geschrieben

Ich hatte bisher eine Collection-Klasse in Delphi verwendet, die als VCL-Komponente alle UIDs der zu erwartenden Bricks/Bricklets speichert. Die Lösung mit dem Timer ist natürlich eleganter und flexibler.

 

Welche WAIT_TIME wäre im Fall einer Chibi oder WIFI Extension nötig ?

 

Vielleicht könnte so ein OnEnumerateFinish ev. irgendwann mal in die Bindings...

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.