Jump to content

photron

Administrators
  • Gesamte Inhalte

    3.189
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    52

Alle erstellten Inhalte von photron

  1. Okay, Version 2.1.1 ist jetzt im Sonatype OSS Repository angekommen: https://oss.sonatype.org/content/repositories/releases/com/tinkerforge/tinkerforge/ Es ist auf http://search.maven.org/ noch nicht zu finden, das sollte in Kürze aber auch gehen.
  2. Sorry, über die ganze RED Brick Entwicklung ist das hier irgendwie hinten runtergefallen Ich hab bei Sonatype jetzt ein neues Projekt für die Bindings beantragt und mein Maven Setup für das Projekt nach deren guter Anleitung konfiguriert. Das sollte in den nächsten Tage also was werden
  3. Android Apps sind in Java geschrieben. Brick Viewer ist aber in Python mit Qt als GUI Bibliothek. Man müsste entweder brickv in Java neuschreiben, oder den Python Code für Android flott machen. Es gibt da wohl Projekt für Python auf Android. Das ist aber alles nicht mal eben und dann ist das GUI Layout von brickv auch nie für Smartphones gedacht gewesen. Erwarte also in nächster Zeit kein Brick Viewer Android App Schau dir aber mal den Prototypen von Brick Viewer im Browser an: www.brickv.com. Allerdings werden da noch nicht alle Brick und Bricklet und Funktionen unterstütz. Das ist in JavaScript und recht leicht zu erweitern.
  4. 2.1.3 ist veröffentlicht.
  5. Bindings: C/C++ 2.1.3 Redeklaration von strnlen in einigen MinGW Umgebungen behoben Download: C/C++
  6. Bindings: C/C++ 2.1.3 Fix strnlen redeclaration in some MinGW environments Download: C/C++
  7. Sorry, test mal bitte diese Version. tinkerforge_c_bindings_2_1_3_rc1.zip
  8. Brick Viewer 2.1.1 Use a more recent UI style on Windows Store port, authentiation options and secret per host and double host history length Use a signed Brick bootloader driver on Windows Add support for WS2811 and WS2812 to LED Strip Bricklet plugin Downloads: Windows, Linux, Mac OS X
  9. Bindings: C/C++ 2.1.2, C# 2.1.1, Delphi/Lazarus 2.1.1, Java 2.1.1, JavaScript 2.0.1, LabVIEW 2.1.1, Mathematica 2.1.1, MATLAB/Octave 2.0.1, Perl 2.1.1, PHP 2.1.1, Python 2.1.1, Ruby 2.1.1, Shell 2.1.1, VB.NET 2.1.1 Add support for WS2811 and WS2812 to LED Strip Bricklet API [all] Download: C/C++, C#, Delphi/Lazarus, Java, JavaScript, LabVIEW, Mathematica, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell, VB.NET
  10. Brick Viewer 2.1.1 Modernen UI Style unter Windows Port, Authentifizierungs-Optionen und Secret werden pro Host-eintrag gespeichert und die Länge der Host-Historie wurde verdoppelt Brick Bootloader Treiber für Windows ist jetzt signiert Support für WS2811 und WS2812 zur LED Strip Bricklet API hinzugefügt Downloads: Windows, Linux, Mac OS X
  11. Bindings: C/C++ 2.1.2, C# 2.1.1, Delphi/Lazarus 2.1.1, Java 2.1.1, JavaScript 2.0.1, LabVIEW 2.1.1, Mathematica 2.1.1, MATLAB/Octave 2.0.1, Perl 2.1.1, PHP 2.1.1, Python 2.1.1, Ruby 2.1.1, Shell 2.1.1, VB.NET 2.1.1 Support für WS2811 und WS2812 zur LED Strip Bricklet API hinzugefügt [alle] Download: C/C++, C#, Delphi/Lazarus, Java, JavaScript, LabVIEW, Mathematica, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell, VB.NET
  12. Kein Tippfehler, sondern missverständlicher Satzbau. Besser wäre gewesen: 0b00001111 in Binär ist also 15.
  13. Du kannst auch mit set_port_configuration() alle 8 Pins eines Port setzen. io.set_port_configuration('b', (1 << 0) | (1 << 7), 'o', True) Hier wählt das erste Parameter den Port, in diesem Falle 'b'. io.set_port('b', 0b00001111) Hier wählt das erste Parameter wieder den Port, in diesem Falle 'b'. Das b in 0b00001111 steht für Binär. 0b00001111 ist also 15 in Binär. In Hex wäre das 0x0F. 0b00001111 (Binär) ist 15 (Dezimal) ist 0x0F (Hex). Einige Programmiersprachen, wie z.B. Python erlauben es Binärzahlen direkt hinzuschreiben. (1 << 0) | (1 << 7) z.B. erzeugt durch Shift- und Or-Operationen die Binärzahl 0b10000001. Die das IO-16 Bricklet dann als Bitmaske interpretiert und den ersten und achten Pin an Port B auf High und alle anderen auf Low setzt, weil das erste und das achte Bit 1 sind und der Rest 0.
  14. Jeder Setter-Aufruf in der API sendet exakt eine Nachricht. Bei jedem Getter kommt dann auch noch exakt eine Nachricht zurück. set_port_configuration() sendet also eine Nachricht. Die IO-16 ist in Port A und Port B unterteilt und an jedem Port sind 8 Pins. Mit set_port_configuration() kannst du die 8 Pins an einem Port setzen. Du brauchst also zwei set_port_configuration() Aufrufe um alle Pins einer IO-16 einmal zu setzen. Wenn du nur zwischen Output-High und Output-Low umschalten willst kannst du auch einmal mit set_port_configuration() alle Pins auf Output stellen und dann mit set_port() zwischen High und Low wechseln.
  15. Da muss du zuerst den aktuellen Text aus dem Textfeld löschen. Das geht z.B, mit T.delete(1.0, END) bevor du mit T.insert() in der cb_temperature() Funktionen neuen einfügst. Etwa so: def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.delete(1.0, END) T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n')
  16. Bindings: C/C++ 2.1.1 Add extern "C" markup to all files to force proper symbol names in C++ Explicitly use ANSI version of WinAPI functions to support UNICODE builds on Windows Add simple library Makefile for Linux Fix race condition between device destruction and callback dispatch Download: C/C++
  17. Bindings: C/C++ 2.1.1 extern "C" Markup zu allen Dateien hinzugefügt, um C Symbolnamen in C++ zu erzwingen Explizit ANSI Version von WinAPI Funktionen verwendet, um die UNICODE Compile-Option unter Windows zu unterstützen Einfaches Library Makefile für Linux hinzugefügt Race Condition zwischen device_destroy() Funktion und Callback-Auslieferung behoben Download: C/C++
  18. Take a look at the interrupt example for the IO-4 Bricklet. You connect your button to pin 0 and a GND pin on the IO-4 Bricklet. Each time the button is pressed or released you get an interrupt callback. You can modify the cb_interrupt() function from the example like this (untested): def cb_interrupt(interrupt_mask, value_mask): # test if interrupt is from pin 0 if interrupt_mask & (1 << 0): # test if button is pressed or released if value_mask & (1 << 0): print "button released" else print "button pressed" if system_activ: system_activ = False print "surveillance is disabled" else: system_activ = True print "surveillance is enabled" Now your script can tell if the button was pressed or released. With this information you can then set your system_activ variable.
  19. Du hast da mehrere Probleme in deinem Script. Die if __name__ == "__main__": Blöcke gehören so nicht innerhalb von Funktionen, bzw. machen da keinen Sinn. Du hast bei der Einrückung Tabs und Spaces gemischt, das mag Python im Zweifels so nicht und führt zu komischen Problemen, da Blöcke in Python durch Einrückung gebildet werden. Die Registrierung und Aktivierung des Temperature-Callbacks erfolgt in der Callback Funktion. Dass kann so nicht funktionieren, das muss außerhalb von cb_temperature() passieren. Etwa so: #!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_remote_switch import RemoteSwitch from tinkerforge.bricklet_temperature import Temperature import os #Tinkerforge HOST = "127.0.0.1" PORT = 4223 RemoteSwitch_UID = "jNw" Temperature_UID = "dFu" root = Tk() root.title("GUI") WMWIDTH, WMHEIGHT, WMLEFT, WMTOP = root.winfo_screenwidth(), root.winfo_screenheight(), 0, 0 root.overrideredirect(1) root.geometry("%dx%d+%d+%d" % (WMWIDTH, WMHEIGHT, WMLEFT, WMTOP)) #Temperature T = None def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n') def shutdown(): os.system("sudo shutdown -h now") def reboot(): os.system("sudo shutdown -r now") def light_on(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_ON) def light_off(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_OFF) #def netio(): # os.system("sudo python /home/pi/GUI/tinkerforge/tinkerforge listen --enable-execute") def exit(): sys.exit() #b=Button(root, text= "NetIO", command=netio) #b.pack() # Create UI logo = PhotoImage(file="/home/pi/GUI/images/rpi_inside.gif") w1 = Label(root, image=logo height=32, width=32).grid(row=1, column=3) MyButton1 = Button(root, text="Shutdown", width=10, command=shutdown) MyButton1.grid(row=1, column=0) MyButton1 = Button(root, text="Reboot", width=10, command=reboot) MyButton1.grid(row=2, column=0) MyButton1 = Button(root, text="Exit", width=10, command=exit) MyButton1.grid(row=3, column=2) MyButton1 = Button(root, text="Licht an", width=10, command=light_on) MyButton1.grid(row=4, column=1) MyButton1 = Button(root, text="Licht aus", width=10, command=light_off) MyButton1.grid(row=5, column=1) T = Text(root, height=2, width=30) T.grid(row=6, column=3) # Create Tinkerforge objects ipcon = IPConnection() rs = RemoteSwitch(RemoteSwitch_UID, ipcon) t = Temperature(Temperature_UID, ipcon) ipcon.connect(HOST, PORT) t.register_callback(t.CALLBACK_TEMPERATURE, cb_temperature) t.set_temperature_callback_period(1000) # Start mainloop root.mainloop()
  20. Wenn du auf dem RPi kein X laufen hast, kannst du kein brickv starten, das ist normal. Die Verzeichnisstruktur muss so aussehen: /home/pi/tinkerforge/ -> dein_script.py -> tinkerforge/ ----> __init__.py ----> ip_connection.py ----> brick_master.py ----> ... ----> bricklet_ambient_light.py ----> ... Die Bindings müssen in einem tinkerforge Unterverzeichnis neben deinem Script liegen und nicht im gleichen Verzeichnis wie dein Script. Und dieses tinkerforge Unterverzeichnis muss eine __init__.py Datei beinhalten, was aber schon der Fall sein sollte wenn du es aus dem ZIP kopierst. xip_connection? Das sollte wenn ip_connection ohne x sein.
  21. Du kannst den Master Brick, der als RS485 Master arbeitet, auch mittels Ethernet oder WIFI Extension mit dem PC verbinden. Es muss nicht USB sein. Die Dokumentation ist da jetzt auch klarere formuliert. Danke für den Hinweise.
  22. Loetkolben, mehrere Python Versionen gleichzeitig installiert zu haben ist normal und kein Problem. RouvenE, irgendwie mach bei dir easy_install Probleme, warum ist mir nicht ganz klar. Lass mich mal zusammenfassen: brickd und brickv sind installiert und funktionieren soweit. Aber die Python Bindings fehlen. Probier mal Folgendes aus: [*]Python Bindings herunterladen und entpacken. [*]Aus dem source Verzeichnis das tinkerforge Verzeichnis neben das Python Script kopieren, das du verwenden willst. [*]Dann sollte Python die Bindings finden können. Damit hast du die Bindings jetzt noch nicht global im System installiert, aber das sollte so erstmal als Test funktionieren.
  23. Das ist komisch. Teste mal ob auch wirklich jemand auf Port 4223 lauscht: netstat -l | grep 4223 Das sollte folgendes ausgeben: tcp 0 0 *:4223 *:* LISTEN Ansonsten kannst du mal versuchen die listen.address Option in /etc/brickd.conf auf 127.0.0.1 zu setzen. Dann werden nur noch lokale Verbindungen angenommen. 0.0.0.0 bedeutet Verbindungen werden von überall her angenommen. Hast vielleicht irgendwelche Firewall Dinge auf dem Raspberry Pi aktiviert, die die lokale Verbindung verhindern?
  24. Leider kann die WIFI Extension (noch) keine Websockets, sonst könntest du auf deinem Smartphone einfach brickv.com aufrufen und dich direkt zu WIFI Extension verbinden un die Temperatur auslesen. Eine Mögliche alternative wäre eine Ethernet Extension (diese kann Websockets). Oder eine Raspberry Pi dazuhängen und die Daten nach Xively hochladen und sie dann auf der Xively Website vom Smartphone aus ansehen. Für die Wetterstation haben wir das samt Beispiel Programm dokumentiert. Du könntest auch NetIO verwenden. Dann brauchst du allerdings noch einen Rechner auf dem die Shell Bindings als NetIO Proxy laufen.
×
×
  • Neu erstellen...