Jump to content

RouvenE

Members
  • Gesamte Inhalte

    62
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von RouvenE

  1. Hallo,

     

    Mangels Zeit für die Einarbeitung verkaufe ich meine Wetterstation:

    - Weather Station Starter Kit in transparent

    - Step down power supply

    - DC Jack Adapter

     

    Die Wetterstation wurde mit einem Raspberry Pi autark betrieben.

     

    EUR 90 zzgl. Versand stelle ich mir vor...

     

    Bei Interesse gerne melden.

     

  2. Hallo,

     

    Derzeit überlege ich (immer noch), den RED Brick einzusetzen...

    Ich möchte den Brick gerne via Netzwerk ansprechen, nicht über USB.

    Würde ich einen WiFi-Adapter am USB-Port betreiben, so gehe ich davon aus, dass dieser ständig in strahlender Verwendung wäre, wenn auf dem Red Brick beispielsweise OpenHAB laufen lassen würde.

     

    Die Ethernet-Extension hingegen empfinde ich mit Euro 40 als eher zu teuer.

     

    Weiß vielleicht jemand, ob es ggf bald eine RED Brick mit Ethernetport gibt? Gibt es anderenfalls ggf. einen unterstützten USB-Ethernet-Adapter?

     

    Kann da jemand etwas zu sagen?

  3. Hallo,

     

    Seit einiger Zeit betreibe ich die TF-Wetterstation mit dem Beispielsscript (Python) mit dem Raspberry Pi 2. Gespeist wird das System durch die lt. TF-Wiki vorgeschlagene Kombination mit DC Jack Adapter und Step Down.

     

    Nun habe ich dem Raspberry eine unterbrechungsfreie Stromversorgng spendiert, die wiederum vom Raspberry gespeist wird.

     

    Der Raspberry friert nun nach einigen Stunden Laufzeit das Display der Wetterstation ein und ist auch komplett nicht mehr (über ssh etc) ansprechbar.

     

    Kann es sein, dass die Stromversorgung (MW-Netzteil mit 3A am Ausgang und derzeit auf 9V eingestellt) das Problem darstellt?

     

    Mich wundert dann nur, dass der RPi bis dahin 10-20 Stunden problemlos lief.

     

    Vielleicht hat ja jemand eine Idee, warum das Gesamtsystem nach Stunden jeweils den Dienst versagt...

     

     

  4. Es ist merkwürdig... habe es angepasst.

     

    Jedoch, der RPi friert zur Schalt-Uhrzeit (22 Uhr) komplett ein und reagiert nicht mehr. Habe eine unterbrechungsfreie Stromversorgung angeschlossen, die den RPi herunterfährt, wenn ich den Strom trenne (da der RPi ja nicht mehr erreichbar ist). Ggf. sagt das ja jemandem etwas, dass dieses noch agiert, wobei ich nicht genau sagen kann, ob es dann tatsächlich den RPi noch herunterfahren kann oder dann nach eingestellten 90 Sekunden simpel den Strom trennt.

     

     

  5. Hi,

     

    Ich habe die Einrückungen korrigiert... ich bin dermaßen wenig daheim, dass ich keine Zeit finde, mir Python anzueignen, was sich ändern soll. Derzeit möchte ich einfach nur das Display zu bestimmten Uhrzeiten schalten, damit es daheim bei der Familie nicht nervt.

     

    Die Einrückungen haben funktioniert, das Script läuft.

     

    Allerdings, zur angegebenen Ausschaltzeit läuft der Pi weiter, das Display friert jedoch ein und wacht auch nicht mehr auf.

     

    Den folgenden Code habe ich ohne Besserung geändert:

    lcd.backlight_off()

    in

    self.lcd.backlight_off()

     

    Vielleicht weiß ja jemand den entscheidenden Hinweis um dieses Problemchen zu beheben,

  6. if __name__ == "__main__":
        log.info('Weather Station: Start')
    
        weather_station = WeatherStation()
    
        if sys.version_info < (3, 0):
            input = raw_input # Compatibility for Python 2.x
    
    
    import time
    
    while 1:
        ts = time.localtime()
        if ts.tm_hour == 22 and ts.tm_minute == 0:
            lcd.backlight_off()
        if ts.tm_hour == 6 and ts.tm_minute == 0:
            lcd.backlight_on()
        time.sleep(50)
    
        if weather_station.ipcon != None:
            weather_station.ipcon.disconnect()
    
        log.info('Weather Station: End')

     

    Habe es nun dort eingefügt...

     

    Nun startet das LCD tatsächlich beim Start des RPi und zeigt Werte an, jedoch unter einer Minute, denn dann friert das Display ein, während der RPi normal weiter läuft.

     

    EDIT:

    Nein, das Display läuft weiter, passt die Werte anfangs sekündlich an, dann scheinbar 1 x / Minute.

  7. #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import socket
    import sys
    import time
    import math
    import logging as log
    log.basicConfig(level=log.INFO)
    
    from tinkerforge.ip_connection import IPConnection
    from tinkerforge.ip_connection import Error
    from tinkerforge.brick_master import Master
    from tinkerforge.bricklet_lcd_20x4 import LCD20x4
    from tinkerforge.bricklet_ambient_light import AmbientLight
    from tinkerforge.bricklet_ambient_light_v2 import AmbientLightV2
    from tinkerforge.bricklet_humidity import Humidity
    from tinkerforge.bricklet_barometer import Barometer
    
    class WeatherStation:
       HOST = "localhost"
       PORT = 4223
    
       ipcon = None
       lcd = None
       al = None
       al_v2 = None
       hum = None
       baro = None
    
       def __init__(self):
           self.ipcon = IPConnection()
           while True:
               try:
                   self.ipcon.connect(WeatherStation.HOST, WeatherStation.PORT)
                   break
               except Error as e:
                   log.error('Connection Error: ' + str(e.description))
                   time.sleep(1)
               except socket.error as e:
                   log.error('Socket error: ' + str(e))
                   time.sleep(1)
    
           self.ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE,
                                        self.cb_enumerate)
           self.ipcon.register_callback(IPConnection.CALLBACK_CONNECTED,
                                        self.cb_connected)
    
           while True:
               try:
                   self.ipcon.enumerate()
                   break
               except Error as e:
                   log.error('Enumerate Error: ' + str(e.description))
                   time.sleep(1)
    
       def cb_illuminance(self, illuminance):
           if self.lcd is not None:
               text = 'Illuminanc %6.2f lx' % (illuminance/10.0)
               self.lcd.write_line(0, 0, text)
               log.info('Write to line 0: ' + text)
    
       def cb_illuminance_v2(self, illuminance):
           if self.lcd is not None:
               text = 'Illumina %8.2f lx' % (illuminance/100.0)
               self.lcd.write_line(0, 0, text)
               log.info('Write to line 0: ' + text)
    
       def cb_humidity(self, humidity):
           if self.lcd is not None:
               text = 'Humidity   %6.2f %%' % (humidity/10.0)
               self.lcd.write_line(1, 0, text)
               log.info('Write to line 1: ' + text)
    
       def cb_air_pressure(self, air_pressure):
           if self.lcd is not None:
               text = 'Air Press %7.2f mb' % (air_pressure/1000.0)
               self.lcd.write_line(2, 0, text)
               log.info('Write to line 2: ' + text)
    
               try:
                   temperature = self.baro.get_chip_temperature()
               except Error as e:
                   log.error('Could not get temperature: ' + str(e.description))
                   return
    
               # \xDF == ° on LCD 20x4 charset
               text = 'Temperature %5.2f \xDFC' % (temperature/100.0)
               self.lcd.write_line(3, 0, text)
               log.info('Write to line 3: ' + text.replace('\xDF', '°'))
    
       def cb_enumerate(self, uid, connected_uid, position, hardware_version,
                        firmware_version, device_identifier, enumeration_type):
           if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or \
              enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE:
               if device_identifier == LCD20x4.DEVICE_IDENTIFIER:
                   try:
                       self.lcd = LCD20x4(uid, self.ipcon)
                       self.lcd.clear_display()
                       self.lcd.backlight_on()
                       log.info('LCD 20x4 initialized')
                   except Error as e:
                       log.error('LCD 20x4 init failed: ' + str(e.description))
                       self.lcd = None
               elif device_identifier == AmbientLight.DEVICE_IDENTIFIER:
                   try:
                       self.al = AmbientLight(uid, self.ipcon)
                       self.al.set_illuminance_callback_period(1000)
                       self.al.register_callback(self.al.CALLBACK_ILLUMINANCE,
                                                 self.cb_illuminance)
                       log.info('Ambient Light initialized')
                   except Error as e:
                       log.error('Ambient Light init failed: ' + str(e.description))
                       self.al = None
               elif device_identifier == AmbientLightV2.DEVICE_IDENTIFIER:
                   try:
                       self.al_v2 = AmbientLightV2(uid, self.ipcon)
                       self.al_v2.set_configuration(AmbientLightV2.ILLUMINANCE_RANGE_64000LUX,
                                                    AmbientLightV2.INTEGRATION_TIME_200MS)
                       self.al_v2.set_illuminance_callback_period(1000)
                       self.al_v2.register_callback(self.al_v2.CALLBACK_ILLUMINANCE,
                                                    self.cb_illuminance_v2)
                       log.info('Ambient Light 2.0 initialized')
                   except Error as e:
                       log.error('Ambient Light 2.0 init failed: ' + str(e.description))
                       self.al = None
               elif device_identifier == Humidity.DEVICE_IDENTIFIER:
                   try:
                       self.hum = Humidity(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 == Barometer.DEVICE_IDENTIFIER:
                   try:
                       self.baro = Barometer(uid, self.ipcon)
                       self.baro.set_air_pressure_callback_period(1000)
                       self.baro.register_callback(self.baro.CALLBACK_AIR_PRESSURE,
                                                   self.cb_air_pressure)
                       log.info('Barometer initialized')
                   except Error as e:
                       log.error('Barometer init failed: ' + str(e.description))
                       self.baro = None
    
       def cb_connected(self, connected_reason):
           if connected_reason == IPConnection.CONNECT_REASON_AUTO_RECONNECT:
               log.info('Auto Reconnect')
    
               while True:
                   try:
                       self.ipcon.enumerate()
                       break
                   except Error as e:
                       log.error('Enumerate Error: ' + str(e.description))
                       time.sleep(1)
    
    if __name__ == "__main__":
       log.info('Weather Station: Start')
    
       weather_station = WeatherStation()
    
       if sys.version_info < (3, 0):
           input = raw_input # Compatibility for Python 2.x
       input('Press key to exit\n')
    
       if weather_station.ipcon != None:
           weather_station.ipcon.disconnect()
    
       log.info('Weather Station: End')

     

    An welcher Stelle würdest Du es einfügen ?

     

    Ich frage mich, warum das alles unter Raspbian Wheezy nicht notwendig war. Das lief problemlos...

     

    Wenn es hilft, wäre das ja super.

  8. Hallo,

     

    Momentan werkelt mein Tinkerforge-Wetterstations-Kit in Zusammenarbeit mit einem Raspberry Pi 2 und dem Standard-Wetterstations-Beispielcode.

     

    Noch immer nicht habe ich Zeit finden können, endlich Python zu lernen.

     

    Was ich momentan einfach nur ändern möchte, ist, dass die Wetterstation nachts ab 22 Uhr bis morgens 6 Uhr das LCD-Backlight ausschaltet...

     

    Im Grunde müsste man doch in Python eine Uhrzeitabfrage einfügen können, die die Zeit prüft und das Backlight eben dann aus- und 1x/Tag wieder einschaltet.

     

    Oder ist ggf. ein cronjob machbar, der das Script nachts beendet und morgens startet ? Aber dann würde das Display eingeschaltet bleiben.

     

    Vielleicht hat ja jemand eine kurze Idee, die ich übergangsweise schnell nutzen könnte. Bis ich soweit bin, hat meine Frau sich zahlreich über das ständig leuchtende Display zu oft beschwert.

  9. Ich liste mal die Logdatei auf...

     

    INFO:root:Weather Station: Start
    Press key to exit
    Traceback (most recent call last):
      File "/home/pi/tinkerforge/wetter.py", line 167, in <module>
        input('Press key to exit\n')
    EOFError: EOF when reading a line

     

    Habe ich in rc.local eingebaut...

     

    Nutze ich statt dem sudo-crontab doch den Benutzer-crontab, so startet das Skript auch nicht.

     

    Muss ich Pfade setzen ? Wenn ja, wie ?

  10. Hi,

     

    Derzeit betreibe ich die Tinkerforge-Wetterstation per Raspberry Pi 2.

    Nun habe ich das System neu aufgesetzt, dabei diesmal aber statt Rapsbian Wheezy das neuere Raspbian Jessie hergenommen.

     

    Brick/d/v sind installiert. Starte ich "python /home/pi/tinkerforge/wetter.py" (Wetterstation-Standard-Beispiels-Script), so funktioniert alles wunderbar.

     

    Um nun das Skript beim Start des RPi zu laden, habe ich zwei Varianten getestet (was zuvor unter Wheezy tadellos funktionierte):

     

    1) sudo crontab -e, dort eingetragen:

    @reboot /usr/bin/python /home/pi/tinkerforge/wetter.py

     

    2) sudo nano /etc/rc.local, dort eingetragen:

    python /home/pi/tinkerforge/wetter.py &

     

    Obwohl ich mit selben Befehlen das Script starten kann, funktioniert nicht der Autostart mit obigen Lösungswegen...

     

    Ein User eines anderen Forums hat dies getestet und folgendes festgestellt:

    "/usr/log/brickd.log[script]2015-10-10 12:02:44.221968 <I> <network.c:373> Added new client (N: 127.0.0.1:60812, T: plain-socket, H: 17, A: disabled)

    2015-10-10 12:02:44.306278 <I> <client.c:220> Client (N: 127.0.0.1:60812, T: plain-socket, H: 17, A: disabled) disconnected by peer[/script]"

     

    Mir ist absolut nicht klar, warum sich a) das Skript manuell starten lässt, nicht aber automatisch und b) alles unter Raspbian Wheezy problemlos funktionierte...

     

    Weiß jemand Rat ?

     

     

  11. Würde vorsichtshalber gerne nochmals fragen:

     

    Ich kann also die Stepdown-Variante der Wetterstation (die aufgrund des bisherigen Raspberry verbaut ist) nutzen und Stepdown->Red Brick->Master stapeln. Dann wäre ein externes Netzteil, wie bisher, notwendig.

     

    Oder ich entferne die Step-Down-Variante und staple Red Brick->Master. Dem Red Brick verpasse ich einen Wlan-USB-Adapter und versorge die Wetterstation dann per Red-Brick-Micro-USB per 5V 1A Apple-Netzadapter.

     

    Bei Variante zwei kann ich die Step-Down-Variante und somit Platz sparen. Spricht also alles hierfür?

     

    Zum Brick wäre meine Frage noch:

    Aktualisiert sich das OS-Image des Red Bricks automatisch oder muss man es bei jedem OS-Update komplett neu einspielen, sodass alles individuell veränderte gelöscht wird?

     

    Da ich noch nicht programmieren kann, frage ich mich, wie einfach man die Wetterstation per Brick Viewer einstellen kann, also ggf Meldungen per E-Mail etc.

     

    Und, ich möchte mein Homematic und Philips Hue gerne in OpenHab auf dem Brick einbinden. Ist dieses und dessen Steuerung ohne Programmierkenntnisse möglich?

     

    Vielleicht kann ja jemand helfen...

  12. PoE ist eher nicht zu realisieren hier...

     

    Ich kann dann DC Jack Adapter und Power Supply entfernen und RED-Master-Ethernet stapeln und einbauen ?

     

    Dann kann ich künftig via Netzwerk auf den RED zugreifen ?

    Klasse...

     

    Einen RSS Catcher wie Fever, der momentan auf dem Raspi läuft, kann man nicht zufällig auf dem RED laufen lassen?

  13. Hm...

     

    Ich möchte doch openHAB auf dem Red Brick/Wetterstation betreiben.

    Das funktioniert doch nur über Ethernet/WLAN? Deswegen wundere ich mich, dass niemand auf die Ethernet Extension hinwies/einging.

     

    Ich muss also den RED Brick via USB am Mac anschliessen, das Image auf die microSD aufspielen und kann diesen dann in der Wetterstation mit Ethernet verbauen?

     

    Nur, ich mag kaum glauben, dass in die Wetterstation der Master Brick, Red Brick, DC Jack und Power supply sowie Ethernet Extension passen... Hat das jemand schon erfolgreich getestet?

  14. Das ist mir noch nicht ganz klar...

     

    Entferne ich den Raspi und ersetze diesen durch den RED Brick, dann staple ich 1) step down power supply/dc jack adapter, 2) RED Brick und 3) Master Brick.

    Den RED Brick verbinde ich dann mit dem USB Kabel.

     

    Nun will ich aber die Wetterstation mit dem RED Brick niemals per USB mit meinem Mac verbinden, sondern möglichst via Ethernet/Brick Viewer auf die Wetterstation zugreifen. Dann brauche ich doch einen Ethernet Extension Master ? Wie soll die Wetterstation sonst ins Netzwerk gelangen?

     

    Und, schaue ich auf die Wetterstation, so kommt es mir vor, als reiche die Tiefe nicht aus, um Step down, RED Brick und Master Brick im Gehäuse zu stapeln?

  15. Hallo,

     

    Seit einiger Zeit betreibt ein Raspberry Pi 2 meine Tinkerforge Wetterstation.

     

    Nun würde ich gerne den RPi2 gegen ein(en) RED Brick austauschen, einfach aus Interesse.

     

    Manches habe ich dabei noch nicht verstand und möchte deshalb mal fragen:

    - wie greife ich auf einen RED Brick zu ohne Bildschirm? Per SSH? Via Ethernet und dem Viewer ? Ist dann ein Ethernet Extension Master notwendig?

    - kann ich die bisherige Hardware belassen zur Stromversorgung (step down power supply und dc jack adapter)?

    - und da ich gerade etwas python lerne: man kann via python-Skript dann beispielsweise das Display der Wetterstation nutzen ?

     

    Mein Ziel ist:

    Wetterstation im Betrieb mit RED Brick zur Ausführung von openHAB. Außerdem möchte ich noch die 4 Buttons mit der Wetterstation verbinden, die Tinkerforge anbietet, um dort neben Wetterdaten eben weitere Meldungen anzeigen zu lassen.

     

    Kann jemand kurz helfen?

  16. Ja, da schmeiße ich wohl was durcheinander...

     

    Mittlerweile gibt es folgendes zu vermelden:

    Ich habe python setup.py install fehlerfrei ausgeführt. Das .egg lässt sich weiterhin nicht installieren mit gleichem Fehler.

     

    Im Verzeichnis des Scripts befindet sich das tinkerforge-Verzeichnis mit den benötigten Dateien *.py.

     

    Heisst, schreibe ich im Script vor den genannten Zeilen wie ip_connection nun tinkerforge.ip_connection, so laufen nun die Scripte.

     

    Aber am liebsten wäre mir, wenn sich das .egg im System installieren würde.

     

  17. Und folgendes lief statt easy_install tinkerforge.egg fehlerfrei durch:

    @rpiHM ~/tinkerforge $ sudo python setup.py install
    running install
    running bdist_egg
    running egg_info
    creating tinkerforge.egg-info
    writing tinkerforge.egg-info/PKG-INFO
    writing top-level names to tinkerforge.egg-info/top_level.txt
    writing dependency_links to tinkerforge.egg-info/dependency_links.txt
    writing manifest file 'tinkerforge.egg-info/SOURCES.txt'
    reading manifest file 'tinkerforge.egg-info/SOURCES.txt'
    writing manifest file 'tinkerforge.egg-info/SOURCES.txt'
    installing library code to build/bdist.linux-armv6l/egg
    running install_lib
    running build_py
    creating build
    creating build/lib.linux-armv6l-2.7
    creating build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/brick_dc.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_distance_us.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_temperature.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_remote_switch.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_tilt.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_motion_detector.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/brick_servo.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/brick_stepper.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_industrial_digital_out_4.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_analog_out.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_ambient_light.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_moisture.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_multi_touch.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_analog_in.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_industrial_digital_in_4.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_industrial_dual_0_20ma.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_current12.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_io4.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_humidity.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_lcd_20x4.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_gps.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_piezo_buzzer.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_dual_button.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/__init__.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_io16.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_piezo_speaker.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_voltage_current.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_distance_ir.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_joystick.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/ip_connection.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_rotary_poti.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_rotary_encoder.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_lcd_16x2.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_sound_intensity.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_current25.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/brick_master.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/brick_imu.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_temperature_ir.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_industrial_quad_relay.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_led_strip.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_barometer.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_hall_effect.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_dual_relay.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_voltage.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_line.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_segment_display_4x7.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_ptc.py -> build/lib.linux-armv6l-2.7/tinkerforge
    copying tinkerforge/bricklet_linear_poti.py -> build/lib.linux-armv6l-2.7/tinkerforge
    creating build/bdist.linux-armv6l
    creating build/bdist.linux-armv6l/egg
    creating build/bdist.linux-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/brick_dc.py -> build/bdist.linux-armv6l/egg/tinkerf
    orge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_distance_us.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_temperature.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_remote_switch.py -> build/bdist.linux-armv
    6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_tilt.py -> build/bdist.linux-armv6l/egg/ti
    nkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_motion_detector.py -> build/bdist.linux-ar
    mv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/brick_servo.py -> build/bdist.linux-armv6l/egg/tink
    erforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/brick_stepper.py -> build/bdist.linux-armv6l/egg/ti
    nkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_industrial_digital_out_4.py -> build/bdist
    .linux-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_analog_out.py -> build/bdist.linux-armv6l/
    egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_ambient_light.py -> build/bdist.linux-armv
    6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_moisture.py -> build/bdist.linux-armv6l/eg
    g/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_multi_touch.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_analog_in.py -> build/bdist.linux-armv6l/e
    gg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_industrial_digital_in_4.py -> build/bdist.
    linux-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_industrial_dual_0_20ma.py -> build/bdist.l
    inux-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_current12.py -> build/bdist.linux-armv6l/e
    gg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_io4.py -> build/bdist.linux-armv6l/egg/tin
    kerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_humidity.py -> build/bdist.linux-armv6l/eg
    g/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_lcd_20x4.py -> build/bdist.linux-armv6l/eg
    g/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_gps.py -> build/bdist.linux-armv6l/egg/tin
    kerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_piezo_buzzer.py -> build/bdist.linux-armv6
    l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_dual_button.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/__init__.py -> build/bdist.linux-armv6l/egg/tinkerf
    orge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_io16.py -> build/bdist.linux-armv6l/egg/ti
    nkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_piezo_speaker.py -> build/bdist.linux-armv
    6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_voltage_current.py -> build/bdist.linux-ar
    mv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_distance_ir.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_joystick.py -> build/bdist.linux-armv6l/eg
    g/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/ip_connection.py -> build/bdist.linux-armv6l/egg/ti
    nkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_rotary_poti.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_rotary_encoder.py -> build/bdist.linux-arm
    v6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_lcd_16x2.py -> build/bdist.linux-armv6l/eg
    g/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_sound_intensity.py -> build/bdist.linux-ar
    mv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_current25.py -> build/bdist.linux-armv6l/e
    gg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/brick_master.py -> build/bdist.linux-armv6l/egg/tin
    kerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/brick_imu.py -> build/bdist.linux-armv6l/egg/tinker
    forge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_temperature_ir.py -> build/bdist.linux-arm
    v6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_industrial_quad_relay.py -> build/bdist.li
    nux-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_led_strip.py -> build/bdist.linux-armv6l/e
    gg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_barometer.py -> build/bdist.linux-armv6l/e
    gg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_hall_effect.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_dual_relay.py -> build/bdist.linux-armv6l/
    egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_voltage.py -> build/bdist.linux-armv6l/egg
    /tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_line.py -> build/bdist.linux-armv6l/egg/ti
    nkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_segment_display_4x7.py -> build/bdist.linu
    x-armv6l/egg/tinkerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_ptc.py -> build/bdist.linux-armv6l/egg/tin
    kerforge
    copying build/lib.linux-armv6l-2.7/tinkerforge/bricklet_linear_poti.py -> build/bdist.linux-armv6l
    /egg/tinkerforge
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/brick_dc.py to brick_dc.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_distance_us.py to bricklet_distan
    ce_us.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_temperature.py to bricklet_temper
    ature.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_remote_switch.py to bricklet_remo
    te_switch.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_tilt.py to bricklet_tilt.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_motion_detector.py to bricklet_mo
    tion_detector.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/brick_servo.py to brick_servo.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/brick_stepper.py to brick_stepper.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_industrial_digital_out_4.py to br
    icklet_industrial_digital_out_4.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_analog_out.py to bricklet_analog_
    out.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_ambient_light.py to bricklet_ambi
    ent_light.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_moisture.py to bricklet_moisture.
    pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_multi_touch.py to bricklet_multi_
    touch.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_analog_in.py to bricklet_analog_i
    n.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_industrial_digital_in_4.py to bri
    cklet_industrial_digital_in_4.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_industrial_dual_0_20ma.py to bric
    klet_industrial_dual_0_20ma.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_current12.py to bricklet_current1
    2.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_io4.py to bricklet_io4.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_humidity.py to bricklet_humidity.
    pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_lcd_20x4.py to bricklet_lcd_20x4.
    pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_gps.py to bricklet_gps.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_piezo_buzzer.py to bricklet_piezo
    _buzzer.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_dual_button.py to bricklet_dual_b
    utton.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/__init__.py to __init__.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_io16.py to bricklet_io16.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_piezo_speaker.py to bricklet_piez
    o_speaker.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_voltage_current.py to bricklet_vo
    ltage_current.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_distance_ir.py to bricklet_distan
    ce_ir.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_joystick.py to bricklet_joystick.
    pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/ip_connection.py to ip_connection.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_rotary_poti.py to bricklet_rotary
    _poti.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_rotary_encoder.py to bricklet_rot
    ary_encoder.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_lcd_16x2.py to bricklet_lcd_16x2.
    pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_sound_intensity.py to bricklet_so
    und_intensity.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_current25.py to bricklet_current2
    5.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/brick_master.py to brick_master.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/brick_imu.py to brick_imu.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_temperature_ir.py to bricklet_tem
    perature_ir.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_industrial_quad_relay.py to brick
    let_industrial_quad_relay.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_led_strip.py to bricklet_led_stri
    p.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_barometer.py to bricklet_baromete
    r.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_hall_effect.py to bricklet_hall_e
    ffect.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_dual_relay.py to bricklet_dual_re
    lay.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_voltage.py to bricklet_voltage.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_line.py to bricklet_line.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_segment_display_4x7.py to brickle
    t_segment_display_4x7.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_ptc.py to bricklet_ptc.pyc
    byte-compiling build/bdist.linux-armv6l/egg/tinkerforge/bricklet_linear_poti.py to bricklet_linear
    _poti.pyc
    creating build/bdist.linux-armv6l/egg/EGG-INFO
    copying tinkerforge.egg-info/PKG-INFO -> build/bdist.linux-armv6l/egg/EGG-INFO
    copying tinkerforge.egg-info/SOURCES.txt -> build/bdist.linux-armv6l/egg/EGG-INFO
    copying tinkerforge.egg-info/dependency_links.txt -> build/bdist.linux-armv6l/egg/EGG-INFO
    copying tinkerforge.egg-info/top_level.txt -> build/bdist.linux-armv6l/egg/EGG-INFO
    zip_safe flag not set; analyzing archive contents...
    creating dist
    creating 'dist/tinkerforge-2.1.0-py2.7.egg' and adding 'build/bdist.linux-armv6l/egg' to it
    removing 'build/bdist.linux-armv6l/egg' (and everything under it)
    Processing tinkerforge-2.1.0-py2.7.egg
    Copying tinkerforge-2.1.0-py2.7.egg to /usr/local/lib/python2.7/dist-packages
    Adding tinkerforge 2.1.0 to easy-install.pth file
    
    Installed /usr/local/lib/python2.7/dist-packages/tinkerforge-2.1.0-py2.7.egg
    Processing dependencies for tinkerforge==2.1.0
    Finished processing dependencies for tinkerforge==2.1.0
    pi@rpiHM ~/tinkerforge $ 

     

    Aber der ip_connection Fehler bleibt beim xively-script

  18. Also, beim Aufruf von easy_install tinkerforge.egg:

    Traceback (most recent call last):
      File "/usr/local/bin/easy_install", line 9, in <module>
        load_entry_point('distribute', 'console_scripts', 'easy_install')()
      File "/usr/local/lib/python2.7/dist-packages/setuptools-5.0.2-py2.7.egg/pkg_resources.py", line 356, in load_entry_point
        return get_distribution(dist).load_entry_point(group, name)
      File "/usr/local/lib/python2.7/dist-packages/setuptools-5.0.2-py2.7.egg/pkg_resources.py", line 2438, in load_entry_point
        raise ImportError("Entry point %r not found" % ((group, name),))
    ImportError: Entry point ('console_scripts', 'easy_install') not found

     

    Beim Aufruf des python-Script für Wetterstation + xively:

    Traceback (most recent call last):
      File "xively.py", line 14, in <module>
        from ip_connection import IPConnection
    ImportError: No module named ip_connection

     

    Hier das nicht funktionierende xively-script mit dem ip_connection-Error:

     #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import socket
    import sys
    import time
    import math
    import logging as log
    import httplib
    import json
    import threading
    log.basicConfig(level=log.INFO)
    
    from ip_connection import IPConnection
    from ip_connection import Error
    from brick_master import Master
    from bricklet_lcd_20x4 import LCD20x4
    from bricklet_ambient_light import AmbientLight
    from bricklet_humidity import Humidity
    from bricklet_barometer import Barometer
    
    class Xively:
        HOST = 'api.xively.com'
        AGENT = "Tinkerforge xively 1.0"
        FEED = 'XXXXXXXX.json'
        API_KEY = 'XXXXXXX'
    
        def __init__(self):
            self.items = {}
            self.headers = {
                "Content-Type"  : "application/x-www-form-urlencoded",
                "X-ApiKey"      : Xively.API_KEY,
                "User-Agent"    : Xively.AGENT,
            }
            self.params = "/v2/feeds/" + str(Xively.FEED)
            self.upload_thread = threading.Thread(target=self.upload)
            self.upload_thread.daemon = True
            self.upload_thread.start()
    
        def put(self, identifier, value):
            try:
                _, min_value, max_value = self.items[identifier]
                if value < min_value:
                    min_value = value
                if value > max_value:
                    max_value = value
                self.items[identifier] = (value, min_value, max_value)
            except:
                self.items[identifier] = (value, value, value)
    
        def upload(self):
            while True:
                time.sleep(5*60) # Upload data every 5min
                if len(self.items) == 0:
                    continue
    
                stream_items = []
                for identifier, value in self.items.items():
                    stream_items.append({'id': identifier,
                                         'current_value': value[0],
                                         'min_value': value[1],
                                         'max_value': value[2]})
    
                data = {'version': '1.0.0',
                        'datastreams': stream_items}
                self.items = {}
                body = json.dumps(data)
    
                try:
                    http = httplib.HTTPSConnection(Xively.HOST)
                    http.request('PUT', self.params, body, self.headers)
                    response = http.getresponse()
                    http.close()
    
                    if response.status != 200:
                        log.error('Could not upload to xively -> ' +
                                  str(response.status) + ': ' + response.reason)
                except Exception as e:
                    log.error('HTTP error: ' + str(e))
    
    class WeatherStation:
        HOST = "localhost"
        PORT = 4223
    
        ipcon = None
        lcd = None
        al = None
        hum = None
        baro = None
    
        def __init__(self):
            self.xively = Xively()
            self.ipcon = IPConnection()
            while True:
                try:
                    self.ipcon.connect(WeatherStation.HOST, WeatherStation.PORT)
                    break
                except Error as e:
                    log.error('Connection Error: ' + str(e.description))
                    time.sleep(1)
                except socket.error as e:
                    log.error('Socket error: ' + str(e))
                    time.sleep(1)
    
            self.ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE,
                                         self.cb_enumerate)
            self.ipcon.register_callback(IPConnection.CALLBACK_CONNECTED,
                                         self.cb_connected)
    
            while True:
                try:
                    self.ipcon.enumerate()
                    break
                except Error as e:
                    log.error('Enumerate Error: ' + str(e.description))
                    time.sleep(1)
    
        def cb_illuminance(self, illuminance):
            if self.lcd is not None:
                text = 'Illuminanc %6.2f lx' % (illuminance/10.0)
                self.lcd.write_line(0, 0, text)
                self.xively.put('AmbientLight', illuminance/10.0)
                log.info('Write to line 0: ' + text)
    
        def cb_humidity(self, humidity):
            if self.lcd is not None:
                text = 'Humidity   %6.2f %%' % (humidity/10.0)
                self.lcd.write_line(1, 0, text)
                self.xively.put('Humidity', humidity/10.0)
                log.info('Write to line 1: ' + text)
    
        def cb_air_pressure(self, air_pressure):
            if self.lcd is not None:
                text = 'Air Press %7.2f mb' % (air_pressure/1000.0)
                self.lcd.write_line(2, 0, text)
                self.xively.put('AirPressure', air_pressure/1000.0)
                log.info('Write to line 2: ' + text)
    
                temperature = self.baro.get_chip_temperature()/100.0
                # \xDF == ° on LCD 20x4 charset
                text = 'Temperature %5.2f \xDFC' % temperature
                self.lcd.write_line(3, 0, text)
                self.xively.put('Temperature', temperature)
                log.info('Write to line 3: ' + text.replace('\xDF', '°'))
    
        def cb_enumerate(self, uid, connected_uid, position, hardware_version,
                         firmware_version, device_identifier, enumeration_type):
            if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or \
               enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE:
                if device_identifier == LCD20x4.DEVICE_IDENTIFIER:
                    try:
                        self.lcd = LCD20x4(uid, self.ipcon)
                        self.lcd.clear_display()
                        self.lcd.backlight_on()
                        log.info('LCD20x4 initialized')
                    except Error as e:
                        log.error('LCD20x4 init failed: ' + str(e.description))
                        self.lcd = None
                elif device_identifier == AmbientLight.DEVICE_IDENTIFIER:
                    try:
                        self.al = AmbientLight(uid, self.ipcon)
                        self.al.set_illuminance_callback_period(1000)
                        self.al.register_callback(self.al.CALLBACK_ILLUMINANCE,
                                                  self.cb_illuminance)
                        log.info('AmbientLight initialized')
                    except Error as e:
                        log.error('AmbientLight init failed: ' + str(e.description))
                        self.al = None
                elif device_identifier == Humidity.DEVICE_IDENTIFIER:
                    try:
                        self.hum = Humidity(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 == Barometer.DEVICE_IDENTIFIER:
                    try:
                        self.baro = Barometer(uid, self.ipcon)
                        self.baro.set_air_pressure_callback_period(1000)
                        self.baro.register_callback(self.baro.CALLBACK_AIR_PRESSURE,
                                                    self.cb_air_pressure)
                        log.info('Barometer initialized')
                    except Error as e:
                        log.error('Barometer init failed: ' + str(e.description))
                        self.baro = None
    
        def cb_connected(self, connected_reason):
            if connected_reason == IPConnection.CONNECT_REASON_AUTO_RECONNECT:
                log.info('Auto Reconnect')
    
                while True:
                    try:
                        self.ipcon.enumerate()
                        break
                    except Error as e:
                        log.error('Enumerate Error: ' + str(e.description))
                        time.sleep(1)
    
    if __name__ == "__main__":
        log.info('Weather Station: Start')
    
        weather_station = WeatherStation()
    
        if sys.version_info < (3, 0):
            input = raw_input # Compatibility for Python 2.x
        input('Press key to exit\n')
    
        if weather_station.ipcon != None:
            weather_station.ipcon.disconnect()
    
        log.info('Weather Station: End')
    

     

    Das funktionierende Script ohne xively:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import socket
    import sys
    import time
    import math
    import logging as log
    log.basicConfig(level=log.INFO)
    
    from tinkerforge.ip_connection import IPConnection
    from tinkerforge.ip_connection import Error
    from tinkerforge.brick_master import Master
    from tinkerforge.bricklet_lcd_20x4 import LCD20x4
    from tinkerforge.bricklet_ambient_light import AmbientLight
    from tinkerforge.bricklet_humidity import Humidity
    from tinkerforge.bricklet_barometer import Barometer
    
    class WeatherStation:
        HOST = "localhost"
        PORT = 4223
    
        ipcon = None
        lcd = None
        al = None
        hum = None
        baro = None
    
        def __init__(self):
            self.ipcon = IPConnection()
            while True:
                try:
                    self.ipcon.connect(WeatherStation.HOST, WeatherStation.PORT)
                    break
                except Error as e:
                    log.error('Connection Error: ' + str(e.description))
                    time.sleep(1)
                except socket.error as e:
                    log.error('Socket error: ' + str(e))
                    time.sleep(1)
    
            self.ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE,
                                         self.cb_enumerate)
            self.ipcon.register_callback(IPConnection.CALLBACK_CONNECTED,
                                         self.cb_connected)
    
            while True:
                try:
                    self.ipcon.enumerate()
                    break
                except Error as e:
                    log.error('Enumerate Error: ' + str(e.description))
                    time.sleep(1)
    
        def cb_illuminance(self, illuminance):
            if self.lcd is not None:
                text = 'Illuminanc %6.2f lx' % (illuminance/10.0)
                self.lcd.write_line(0, 0, text)
                log.info('Write to line 0: ' + text)
    
        def cb_humidity(self, humidity):
            if self.lcd is not None:
                text = 'Humidity   %6.2f %%' % (humidity/10.0)
                self.lcd.write_line(1, 0, text)
                log.info('Write to line 1: ' + text)
    
        def cb_air_pressure(self, air_pressure):
            if self.lcd is not None:
                text = 'Air Press %7.2f mb' % (air_pressure/1000.0)
                self.lcd.write_line(2, 0, text)
                log.info('Write to line 2: ' + text)
    
                try:
                    temperature = self.baro.get_chip_temperature()
                except Error as e:
                    log.error('Could not get temperature: ' + str(e.description))
                    return
    
                # \xDF == ° on LCD 20x4 charset
                text = 'Temperature %5.2f \xDFC' % (temperature/100.0)
                self.lcd.write_line(3, 0, text)
                log.info('Write to line 3: ' + text.replace('\xDF', '°'))
    
        def cb_enumerate(self, uid, connected_uid, position, hardware_version,
                         firmware_version, device_identifier, enumeration_type):
            if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or \
               enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE:
                if device_identifier == LCD20x4.DEVICE_IDENTIFIER:
                    try:
                        self.lcd = LCD20x4(uid, self.ipcon)
                        self.lcd.clear_display()
                        self.lcd.backlight_on()
                        log.info('LCD 20x4 initialized')
                    except Error as e:
                        log.error('LCD 20x4 init failed: ' + str(e.description))
                        self.lcd = None
                elif device_identifier == AmbientLight.DEVICE_IDENTIFIER:
                    try:
                        self.al = AmbientLight(uid, self.ipcon)
                        self.al.set_illuminance_callback_period(1000)
                        self.al.register_callback(self.al.CALLBACK_ILLUMINANCE,
                                                  self.cb_illuminance)
                        log.info('Ambient Light initialized')
                    except Error as e:
                        log.error('Ambient Light init failed: ' + str(e.description))
                        self.al = None
                elif device_identifier == Humidity.DEVICE_IDENTIFIER:
                    try:
                        self.hum = Humidity(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 == Barometer.DEVICE_IDENTIFIER:
                    try:
                        self.baro = Barometer(uid, self.ipcon)
                        self.baro.set_air_pressure_callback_period(1000)
                        self.baro.register_callback(self.baro.CALLBACK_AIR_PRESSURE,
                                                    self.cb_air_pressure)
                        log.info('Barometer initialized')
                    except Error as e:
                        log.error('Barometer init failed: ' + str(e.description))
                        self.baro = None
    
        def cb_connected(self, connected_reason):
            if connected_reason == IPConnection.CONNECT_REASON_AUTO_RECONNECT:
                log.info('Auto Reconnect')
    
                while True:
                    try:
                        self.ipcon.enumerate()
                        break
                    except Error as e:
                        log.error('Enumerate Error: ' + str(e.description))
                        time.sleep(1)
    
    if __name__ == "__main__":
        log.info('Weather Station: Start')
    
        weather_station = WeatherStation()
    
        if sys.version_info < (3, 0):
            input = raw_input # Compatibility for Python 2.x
        input('Press key to exit\n')
    
        if weather_station.ipcon != None:
            weather_station.ipcon.disconnect()
    
        log.info('Weather Station: End')
    

     

    Hoffe, das hilft...

     

×
×
  • Neu erstellen...