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.

photron

Administrators
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von photron

  1. Diese beiden Zeilen sind interessant: 2014-07-12 05:10:14.277472 <E> <network|client.c:260> Could not receive from client (S: 7281224, T: plain, P: P^Mo, A: disabled), disconnecting client: EBADF (9) 2014-07-12 05:10:14.334119 <E> <network|client.c:260> Could not receive from client (S: 7281224, T: plain, P: PTî¶PTî¶23.81, A: disabled), disconnecting client: EBADF (9) "S: 7281224" heißt der File Descriptor des Sockets diese Clients hat einen Wert von 7281224, das ist sehr hoch und ungewöhnlich, daher kommt da dann auch ein EBADF (ungültiger File Descriptor) als Fehler bei rum. "P: PTî¶PTî¶23.81" ist der Peername des Clients, da sollte eine IP Adresse stehen, das sieht aber nach Schrott aus. Das sieht auf den ersten Blick nach Heap Corruption aus. Irgendwie bringst du brickd dazu irgendwo falsch im Speicher herumzuschreiben. Kannst du das Problem reproduzieren? Es wäre hilfreich dazu ein Valgrind Log zu sehen. Dazu brickd manuell mit Valgrind starten: sudo valgrind brickd
  2. Ich habe gerade mal ein paar neue dinge dem Brick Viewer hinzugefügt: - "Show Black" Knopf - Gradient funktioniert jetzt auch mit einer LED und besser mit geringen LED Zahlen - Gradient läuft anders herum - "Moving Color Dot" Mode hinzugefügt Ich nehme an du hast noch deinen git Clone von brickv, dann kannst du das gleich testen
  3. Die IE Meldungen werden von Windows SmartScreen kommen. Der "neue" Treiber ist der alte Atmel Bootloader Treiber für die Bricks, den Atmel jetzt in einer signierten Version bereitstellt, so dass er auch auf Windows 8 ohne Umwege installiert werden kann und frühere Windows Versionen sich nicht mehr über einen nicht-signierten Treiber beschweren. Mal sehen was wir aus deinen LED Strip Ideen machen. Dazu melde ich mich dann später nochmal
  4. Schau bitte mal ins brickd Log auf dem Raspberry Pi: /var/log/brickd.log Falls du daraus nicht schlau wirst, dann kannst du das auch hier posten, damit wir einen Blick darauf werfen können.
  5. Thema antwortete auf photrons JonathanH in: Allgemeine Diskussionen
    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.
  6. Thema antwortete auf photrons JonathanH in: Allgemeine Diskussionen
    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
  7. 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.
  8. Bindings: C/C++ 2.1.3 Redeklaration von strnlen in einigen MinGW Umgebungen behoben Download: C/C++
  9. Thema antwortete auf photrons photron in: General Discussion
    Bindings: C/C++ 2.1.3 Fix strnlen redeclaration in some MinGW environments Download: C/C++
  10. Sorry, test mal bitte diese Version. tinkerforge_c_bindings_2_1_3_rc1.zip
  11. Thema antwortete auf photrons photron in: General Discussion
    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
  12. Thema antwortete auf photrons photron in: General Discussion
    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
  13. 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
  14. 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
  15. Kein Tippfehler, sondern missverständlicher Satzbau. Besser wäre gewesen: 0b00001111 in Binär ist also 15.
  16. 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.
  17. 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.
  18. 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')
  19. Thema antwortete auf photrons photron in: General Discussion
    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++
  20. 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++
  21. 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.
  22. 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()
  23. 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.

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.