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,

 

ich bin noch relativ neu im Thema Tinker Forge und habe momentan meine Probleme damit einen Messstand nachzubauen der von meinem Vorgänger entwickelt wurde.

Der Versuchsaufbau misst Lufttemp., Strahlungstemp., relative Feuchte usw. um die hygrothermische Behaglichkeit bewerten zu können.

Nun habe ich das Humidtity Bricklet durch einen V2, die Rotary Encorder und die IR durch IRV2 ausgetauscht aber irgendwie bring ich die Kiste nicht zum Laufen.

Die Funktion der Bricklets habe ich im Brickviewer überprüft. Ein Teil der Bricklets wird aber irgendwie nicht initialisiert. Ich habe mir mal in einer Lof-Datei alle ausgeben lassen die gefunden werden.

INFO:root:Messsystem: Start

 

INFO:root:device identifier: 17

INFO:root:device identifier: 17

INFO:root:device identifier: 13

INFO:root:device identifier: 13

INFO:root:device identifier: 13

INFO:root:device identifier: 13

INFO:root:device identifier: 226

INFO:root:Temperature2 initialized

INFO:root:device identifier: 212

INFO:root:LCD 20x4 initialized

INFO:root:device identifier: 263

INFO:root:OLED initialized

INFO:root:device identifier: 262

INFO:root:CO2 initialized

INFO:root:device identifier: 226

INFO:root:Globethermometer initialized

INFO:root:device identifier: 294

 

Es scheint, dass er mir die V2 Rotary und V2 IR-Temps nicht initialisieren kann.

 

 # Bricklets initialisieren    
    def cb_enumerate(self, uid, connected_uid, position, hardware_version, firmware_version, device_identifier, enumeration_type):
        
        
        log.info('device identifier: '+ str(device_identifier))
            
        if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or \
           enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE:
               
            #log.info('device identifier: '+ str(device_identifier))
            
            if device_identifier == LCD20x4.DEVICE_IDENTIFIER:
                try:
                    self.lcd = LCD20x4(uid, self.ipcon)
                    self.lcd.clear_display()
                    self.lcd.register_callback(self.lcd.CALLBACK_BUTTON_PRESSED, self.cb_pressed) 
                    log.info('LCD 20x4 initialized')
                    self.lcd.backlight_on()
                    text2 = 'Willkommen'
                    self.lcd.write_line(1, 5, text2)
                except Error as e:
                    log.error('LCD 20x4 init failed: ' + str(e.description))
                    self.lcd = None
            
            elif device_identifier == BrickletOLED128x64.DEVICE_IDENTIFIER:
                try:
                    self.oled = BrickletOLED128x64(uid, self.ipcon)
                    self.oled.clear_display()            
                    log.info('OLED initialized')
                except Error as e:
                    log.error('OLED init failed: ' + str(e.description))
                    self.oled = None
                    
            elif device_identifier == BrickletHumidityV2.DEVICE_IDENTIFIER:
                try:
                    self.hum = BrickletHumidityV2(uid, self.ipcon)
                    self.hum.set_humidity_callback_period(1000)
                    self.hum.register_callback(self.hum.CALLBACK_HUMIDITY, self.cb_humidity)
                    log.info('Humidity initialized')
                except Error as e:
                    log.error('Humidity init failed: ' + str(e.description))
                    self.hum = None

            elif device_identifier == BrickletPTC.DEVICE_IDENTIFIER and uid == 'temp1':
                try:
                    self.ptc1 = BrickletPTC(uid, self.ipcon)
                    self.ptc1.set_temperature_callback_period(1000)
                    self.ptc1.register_callback(self.ptc1.CALLBACK_TEMPERATURE, self.cb_temperature1)
                    log.info('Temperature1 initialized')
                except Error as e:
                    log.error('Temperature1 init failed: ' + str(e.description))
                    self.ptc1 = None

            elif device_identifier == BrickletPTC.DEVICE_IDENTIFIER and uid == 'temp2':
                try:
                    self.ptc2 = BrickletPTC(uid, self.ipcon)
                    self.ptc2.set_temperature_callback_period(1000)
                    self.ptc2.register_callback(self.ptc2.CALLBACK_TEMPERATURE, self.cb_temperature2)
                    log.info('Temperature2 initialized')
                except Error as e:
                    log.error('Temperature2 init failed: ' + str(e.description))
                    self.ptc2 = None
                    
                    

            elif device_identifier == BrickletPTC.DEVICE_IDENTIFIER and uid == 'gLobe':
                try:
                    self.ptc3 = BrickletPTC(uid, self.ipcon)
                    self.ptc3.set_wire_mode(4)
                    self.ptc3.set_temperature_callback_period(1000)
                    self.ptc3.register_callback(self.ptc3.CALLBACK_TEMPERATURE, self.cb_globe)
                    log.info('Globethermometer initialized')
                except Error as e:
                    log.error('Globethermometer init failed: ' + str(e.description))
                    self.ptc3 = None
                    
            elif device_identifier == BrickletRotaryEncoderV2.DEVICE_IDENTIFIER and uid == 'rot1':
                try:
                    self.re1 = BrickletRotaryEncoderV2(uid, self.ipcon)
                    self.re1.set_count_callback_period(50)
                    self.re1.register_callback(self.re1.CALLBACK_COUNT, self.cb_rotary1_count)
                    self.re1.register_callback(self.re1.CALLBACK_PRESSED, self.cb_rotary1_press)
                    reset= True
                    self.re1.get_count(reset)
                    log.info('Rotary1 initialized')
                except Error as e:
                    log.error('Rotary1 init failed: ' + str(e.description))
                    self.re1 = None        

            elif device_identifier == BrickletTemperatureIRV2.DEVICE_IDENTIFIER and uid == 'ir1':
                try:
                    self.ir1 = BrickletTemperatureIRV2(uid, self.ipcon)
                    self.ir1.set_object_temperature_callback_period(1000)
                    self.ir1.register_callback(self.ir1.CALLBACK_OBJECT_TEMPERATURE, self.cb_irtemperature1)
                    self.ir1.set_emissivity(62258)
                    log.info('IR1 initialized')
                except Error as e:
                    log.error('IR1 init failed: ' + str(e.description))
                    self.ir1 = None

            elif device_identifier == BrickletRotaryEncoderV2.DEVICE_IDENTIFIER and uid == 'rot2':
                try:
                    self.re2 = BrickletRotaryEncoderV2(uid, self.ipcon)
                    self.re2.set_count_callback_period(50)
                    self.re2.register_callback(self.re2.CALLBACK_COUNT, self.cb_rotary2_count)
                    self.re2.register_callback(self.re2.CALLBACK_PRESSED, self.cb_rotary2_press)
                    reset= True
                    self.re2.get_count(reset)
                    log.info('Rotary2 initialized')
                except Error as e:
                    log.error('Rotary2 init failed: ' + str(e.description))
                    self.re2 = None
                    
            elif device_identifier == BrickletTemperatureIRV2.DEVICE_IDENTIFIER and uid == 'ir2':
                try:
                    self.ir2 = BrickletTemperatureIRV2(uid, self.ipcon)
                    self.ir2.set_object_temperature_callback_period(1000)
                    self.ir2.register_callback(self.ir2.CALLBACK_OBJECT_TEMPERATURE, self.cb_irtemperature2)
                    self.ir2.set_emissivity(62258)
                    log.info('IR2 initialized')
                except Error as e:
                    log.error('IR2 init failed: ' + str(e.description))
                    self.ir2 = None

            elif device_identifier == BrickletCO2.DEVICE_IDENTIFIER:
                try:
                    self.co2 = BrickletCO2(uid, self.ipcon)
                    self.co2.set_co2_concentration_callback_period(1000)
                    self.co2.register_callback(self.co2.CALLBACK_CO2_CONCENTRATION, self.cb_co2_concentration)
                    log.info('CO2 initialized')
                except Error as e:
                    log.error('CO2 init failed: ' + str(e.description))
                    self.co2 = None

 

Wo habe ich da den Fehler drin :(

Geschrieben
  • Autor

Ja die Firmware ist auf dem neuesten Stand.

Kann es sein, dass einige Funktionen der alten Versionen auf den neuen nicht mehr funktionieren?

Geschrieben

Die neuen Bricklets haben andere Funktionen zur Callback-Konfiguration (wir haben für die neuen Bricklets den kompletten Mechanismus überarbeitet und vereinfacht).

 

Du verwendest z.B. "set_humidity_callback_period", das gibt es aber gar nicht mehr. Siehe set_humidity_callback_configuration: https://www.tinkerforge.com/de/doc/Software/Bricklets/HumidityV2_Bricklet_Python.html

Geschrieben
  • Autor

Guter Hinweis, das mit Initialisieren funktioniert mittlerweile bei allen Bricklets. Dummerweise hänge ich immer noch im Willkommen Screen fest.

 

 

Ich weiß, dass es brutal viel Code (im Anhang) ist, aber falls jemand nen Fehler auf Anhieb findet,wäre ich sehr dankbar, ich komm gerade nicht weiter. Es scheint so als würde er immer wieder initialisieren. Ein Drücken der Buttons hat komischer Weise keine Wirkung.

Python-Code__geAndert2.0.py

Geschrieben

Die "write_lines" werden ja direkt in den Callbacks aufgerufen? Ich würde erstmal damit anfangen prints in die Callbacks zu machen um schauen ob Sie aufgerufen werden. Wenn sie aufgerufen werden musst du gucken welche der Bedingungen nicht eintreffen (self.Tick1 = X etc).

 

So auf Anhieb nur durchs draufschauen kann ich keinen Bug finden.

Geschrieben
  • Autor

Momentan stell ich mich mit dem debuggen noch etwas schwerfällig an.

Jedes Mal wenn ich am Code was geändert habe lade ich das File über dieses 8 Schritte Programm im Brickviewer auf den Redbrick um auf Fehlersuche zu gehen.

Dabei lässt sich allerdings nur über die eingefügten Logs ermitteln in welche Zeilen er gekommen ist und welche er gar nicht erst erreicht hat. Gibt es auch eine Möglichkeit direkt aus Spyder den Python Code zu debuggen. Da kommt logischer Weise derzeit nur die Meldung:

    from tinkerforge.ip_connection import IPConnection

ModuleNotFoundError: No module named 'tinkerforge'

Geschrieben
  • Autor

Aber man muss immer den Weg über den BrickViewer machen oder kann man auch direkt in Spyder debuggen. Ich würde gerne mal schrittweise durch den Code gehen um zu sehen wo er was überspringt, ohne hinter jede Zeile einen Print zu setzen

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.