Jump to content

All Activity

This stream auto-updates     

  1. Today
  2. Hallo Tinkerforge-Fans, Ich habe das Tabletop-Weather-Station-Kit um den Soundsensor erweitert. Jetzt möchte ich gerne einen Screenshot machen. Das LCD-Bricklet hat ja die lcd128x64.read_pixels() Methode, mit Hilfe der das gehen sollte. Ich habe dazu ein kleines Python-Prgramm geschrieben, es klappt auch soweit, jedoch gibt es unvollständige Screenshots: Auf dem Startscreen fehlen die Tabs, auf den Graphic-Screen ausserdem die eigentliche Grafik. Es wird offenbar immer nur ein Teil der LCD-Pixel übertragen. Hier ist mein Code für den Screenshot: from tabletop_weather_station_demo.tinkerforge.ip_connection import IPConnection, Error from tabletop_weather_station_demo.tinkerforge.bricklet_lcd_128x64 import BrickletLCD128x64 from tinkerforge.ip_connection import IPConnection, Error from tinkerforge.bricklet_lcd_128x64 import BrickletLCD128x64 import png HOST = "localhost" PORT = 4223 UID = "H9a" ipcon = IPConnection() lcd128x64 = BrickletLCD128x64(UID, ipcon) ipcon.connect(HOST, PORT) pixels = lcd128x64.read_pixels(0,0,127,63) intpixels = [255 if x else 0 for x in pixels] f = open("lcdimage.png", "wb") w = png.Writer(128,64, greyscale=True, bitdepth=8, alpha=False) rows = w.array_scanlines(intpixels) w.write(f, rows) f.close() Hat jemand eine Idee, wieso das so ist und wie einen vollständigen Screenshot anfertigen kann? Gruß Karsten
  3. Hallo rtrbt, Danke für den Hinweis. Dann werde ich mir wohl ein IMU-Brick zulegen müssen Gruß Mausschieber
  4. Hallo Erik ich habe mir für ein paar meiner Bricklest Deine neue Doku angeschaut, Sie gefällt mir gut. Frage: Hast Du in der Doku auch Beispiele & Besonderheiten vorgesehen ? Ich habe keine gesehen. Hintergrund der Frage anhand des Remote Switch Bricklet betrachtet Du schreibst: Wenn ich jetzt nicht über das Forum Deine Beiträge gelesen hätte, wäre mir nicht klar gewesen dass ich bei dem Channel-verlinktem String-Item (für Socket-A), dem String-Item „on“ oder „off“ übergeben muss. (also als String) Beispiel einer hilfreichen Zusatzinformation in der Dokumentation : Auch Hinweise dass man z.B. einem Channel-verlinktem ITEM eines EdgeCount (der verschiedenen Bricklet) ein „REFRESH“ übergeben kann um einen Update der Werte zu erzwingen wäre nicht schlecht. Generell bin ich für jeden Hinweis dankbar um Fehler zu finden oder zu vermeiden. Ich könnte mir vorstellen, dass diese zusätzlichen Informationen / Beispiele Anfängern oder "Teilzeit" Openhab-Anwendern helfen würden (zumindest geht es mir so). An dieser Stelle nochmal Danke an Deine tolle Arbeit Viele Grüße Stefan
  5. Yesterday
  6. moin, Problem gelöst. Dein Tipp hätte die Lösung sein können, wäre ich nicht so blöd gewesen. Ich habe nach dem upgrade mit autoremove/clean "geputzt" und da wurde das ältere perl-Modul (das screen benötigt) eben auch entsorgt. Ich habe jetzt das RED-Image neu installiert und konnte screen problemlos installieren und den Fehler auch nachvollziehen. Prinzipiell werde ich mir das Vorgehen beim Nachinstallien aber abspeichern (kann ja bei anderen Programmen, die ältere -bisher ungenutzte- Module benötigen auch passieren) . Wie heißt es so schön: "Kaum macht man's richtig, schon funktioniert's!" Danke und viele Grüße Jörg
  7. Last week
  8. Habe ich schon mehrmals überprüft, aber es ist 0 und 1. Die Version ist 2.0. Ich schaue nochmals.
  9. Moin, Es gibt jetzt einen ersten Prototypen der openHAB-Dokumentation. Erstmal nur auf Englisch und noch ohne die allgemeinen Dinge wie Installationsanleitung, Beispiele usw. Falls noch device-spezifische Dinge fehlen, oder euch etwas anderes auffällt, bitte melden. Gruß, Erik
  10. Huhu, schonmal danke für die Infos, das erste mit der Datenbank klingt natürlich mega ich muss da aber mal sachauen ob es auch mit MariaDB geht, denn die läuft ohnehin schon am Server. Dann könnte man auch eine Verbraucherstatistik der einzelnen Verbracher anlegen um zu sehen welches Licht wann, wielang und am häufigsten an war etc. also ich denke auf kurz oder lang werde ich diesen Weg mal versuchen, aber vorab werde ich erstmal die einfache Variante versuchen. Ich hab das schonal auf die schnelle rein gebastelt, aber scheint noch nocht zu funktionieren, werd noch ein wenig rum tüfteln, wenn ich nicht weiter komme und den Fehler nicht finden sollte meld ich mich hier nochmal, ebenso wenn ich es geschafft habe ^^ bb
  11. Ich meinte damit nur die CPU-Last von Brick Daemon. Wenn ich mir deinen nmon-Screenshot ansehe, ist dein Problem anscheinend, dass der Arbeitsspeicher voll ist, der Java-Prozess lässt dann die ganze Zeit den Garbage Collector laufen, was die CPU-Last in die Höhe treibt. Du kannst etwas Arbeitsspeicher freiräumen, wenn mit dem Brick Viewer alle Services deaktivierst, die du nicht brauchst, z.B. die graphische Oberfläche, usw. Du kannst mit der available-Spalte von free -m nachsehen, wie viel Arbeitsspeicher wirklich frei ist. Linux benutzt freien Arbeitsspeicher gerne um Daten zu cachen, wirft die Caches aber weg, wenn der RAM knapp wird, damit Anwendungen ihn benutzen können. Deshalb ist die free-Spalte nicht so aussagekräftig.
  12. Moin, ich habe nur einen Master Brick und 4 Sachen verbunden. Das musste doch eigelich gehen. Wieviel braucht einen normalen Java program um die Sensoren met 1Hz aus zu lesen ? Mein setup ist : Master brick 2.1 Segment Display 4 x 7 Bricklet Motion Detector Bricklet Ambient Light Bricklet 2.0 Temperature Bricklet MfG, Rik
  13. Vielen vielen danke. Das war das Problem. Da habe ich jetzt lange gesucht und immer an der falschen Stelle gesucht! Problem erledigt! Danke!😃
  14. Moin, Das ist normal, wenn du einen Stapel auf dem RED-Brick hast. Der RED-Brick hat nur einen CPU-Kern, der ungefähr so schnell ist wie ein Raspberry Pi 1.
  15. Ich habe mir das jetzt nicht alles im Detail angesehen, aber zumindest das hier tut nicht das was du denkst: for i in self.onewire: if i.get_identity() == uid: break # Wenn das Onewire Modul schon als Object in der Liste ist wird abgebrochen self.onewire.append(BrickletOneWire(uid, self.ipcon)) Die get_identity() Funktion gibt ein namedtuple zurück. Das mit uid zu vergleichen ist immer False. Du musst uid mit dem uid Feld des namedtuple vergleichen. Dann ist das break da nicht das richtige. Das bricht die for Schleife ab, aber der append() Aufruf danach wird trotzdem ausgeführt. Da muss du ein return verwenden um den gesamten Aufruf von cb_enumerate zu beenden. Etwa so: for i in self.onewire: if i.get_identity().uid == uid: return # Wenn das Onewire Modul schon als Object in der Liste ist wird abgebrochen self.onewire.append(BrickletOneWire(uid, self.ipcon)) So wie du es aktuell hast fügst du das Bricklet zweimal in deine Liste ein. Das könnte schon das ganze Problem sein.
  16. Moin, Hast du das Problem mit einem Industrial Dual Analog In 1.0 oder 2.0? Ich habe es hier mit dem 2.0 getestet und es funktioniert so wie es soll. Hast du eventuell beide Channels auf das selbe Item registriert?
  17. Hallo Zusammen, ich Versuche eine Python Methode zu schreiben welche über einen eigenen Thread DS18B20 Temperatursensoren ausließt und in eine globale Variable schreibt. Der Code funktioniert auch wenn ich ihn nicht in einen Thread auslagere Vielleicht kann mir jemand sagen was ich falsch mache? Hier der Code: import time import threading from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_one_wire import BrickletOneWire HOST = "localhost" PORT = 4223 tempsensors = [ {"sensor": 0, "address": "123", "found": False, "temperature": 0.0, "identifier": 0, "deviceobject": None}, \ {"sensor": 1, "address": "123", "found": False, "temperature": 0.0, "identifier": 0, "deviceobject": None}, \ {"sensor": 2, "address": "3456", "found": False, "temperature": 0.0, "identifier": 0, "deviceobject": None}, \ ] # Hier sollen alle Sensoren die bekannt sind und verwendet werden aufgeführt sein. Achtung das muss händisch erledigt werden tempsensorsnew = [] # Hier sollen alle Sensoren Automatisch eingetragen werden welche noch nicht in die Liste aufgenommen wurden class Rugged: def __init__(self): self.onewire = [] # Liste erzeugen wo die Onewire geräte eingefügt werden self.__threadonewire = threading.Thread(target=self.__getonewire) self.ipcon = IPConnection() # Create IP Connection self.ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE, self.cb_enumerate) # Register Callback self.ipcon.register_callback(IPConnection.CALLBACK_CONNECTED, self.cb_connected) # Register Callback self.ipcon.connect(HOST, PORT) self.ipcon.enumerate() def cb_enumerate(self, uid, connected_uid, position, hardware_version, firmware_version, device_identifier, enumeration_type): global onewire if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE: if device_identifier == BrickletOneWire.DEVICE_IDENTIFIER: if not self.onewire: self.onewire = [BrickletOneWire(uid, self.ipcon)] time.sleep(0.5) else: for i in self.onewire: if i.get_identity() == uid: break # Wenn das Onewire Modul schon als Object in der Liste ist wird abgebrochen self.onewire.append(BrickletOneWire(uid, self.ipcon)) time.sleep(0.5) if not self.__threadonewire.is_alive(): self.__threadonewire.start() #self.__getonewire() # Wenn die funktion direkt anstatt des Threads ausgeführt wird funktioniert es def cb_connected(self, connected_reason): # Enumerate devices again. If we reconnected, the Bricks/Bricklets # may have been offline and the configuration may be lost. # In this case we don't care for the reason of the connection self.ipcon.enumerate() def __getonewire(self): global tempsensors global tempsensorsnew while True: print(tempsensors) print(tempsensorsnew) for i in self.onewire: i.reset_bus() # setzt den Bus zurück searched = i.search_bus() i.write(78) # WRITE SCRATCHPAD i.write(0) # ALARM H (unused) i.write(0) # ALARM L (unused) i.write(127) # CONFIGURATION: 12-bit mode i.write(68) # CONVERT T (start temperature conversion) time.sleep(1) # Wait for conversion to finish for x in searched[0]: i.write_command(x, 190) # READ SCRATCHPAD t_low = i.read().data t_high = i.read().data temperature = t_low | (t_high << 8) if temperature > 1 << 12: temperature -= 1 << 16 temperature = temperature / 16.0 crc = hex(x)[2:4] family = hex(x)[-2:] address = hex(x)[(2 + len(crc)):(len(hex(x)) - len(family))] #print("Family: " + hex(x)[-2:]) #print("CRC: " + hex(x)[2:4]) #print("Address: " + address.upper()) sensorfound = False for g in tempsensors: if g["address"].upper() == address.upper(): sensorfound = True g["found"] = True g["identifier"] = x g["deviceobject"] = i g["temperature"] = temperature break else: sensorfound = False if not sensorfound: for g in tempsensorsnew: if g["address"].upper() == address.upper(): sensorfound = True g["temperature"] = temperature break else: sensorfound = False if not sensorfound: tempsensorsnew.append({"sensornew": len(tempsensorsnew), "address": address, "temperature": temperature, "identifier": x, "deviceobject": i}) if __name__ == "__main__": Rugged() input('Press key to exit\n') Danke für eure Hilfe. Folgender Fehler kommt: Exception in thread Thread-1: Traceback (most recent call last): File "C:\Program Files (x86)\Python38-32\lib\threading.py", line 932, in _bootstrap_inner self.run() File "C:\Program Files (x86)\Python38-32\lib\threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "C:/...Control.py", line 74, in __getonewire searched = i.search_bus() File "C:\...Control\venv\lib\site-packages\tinkerforge\bricklet_one_wire.py", line 329, in search_bus ret = self.search_bus_low_level() File "C:\...Control\venv\lib\site-packages\tinkerforge\bricklet_one_wire.py", line 122, in search_bus_low_level return SearchBusLowLevel(*self.ipcon.send_request(self, BrickletOneWire.FUNCTION_SEARCH_BUS_LOW_LEVEL, (), '', 'H H 7Q B')) File "C:\...Control\venv\lib\site-packages\tinkerforge\ip_connection.py", line 1220, in send_request raise Error(Error.TIMEOUT, msg, suppress_context=True) tinkerforge.ip_connection.Error: Did not receive response for function 1 in time (-1)
  18. Hallo Ich glaube da ist ein Fehler im Industrial Dual Analog In beim Openhab im Brick Viewer funktioniert es einwandfrei. Im Moment habe ich nur Channel 0 im Betrieb, trotzdem zeigt es im OpenHab bei beiden Channels das selbe an. Kannst du das Bestätigen?
  19. Das zweite mal ist der Hat nun einfach in einen Bootloader-Modus gewechselt, ohne auch nur etwas anzufassen. Es scheint als sei der Hat noch nicht so Stabil, die Bricks laufen einwandfrei, der Hat macht immer wieder Zicken.
  20. Ist auch mehr fuer den Staff hier ob dss normal ist 😀 TinkerTeam ist das einen bekanntes Problem oder neu ?
  21. Das weiß ich leider auch nicht. Ich habe mich schon lange nicht mehr damit beschäftigt, habe zu viel Anderes zu tun im Moment.Das weiß ich leider auch nicht. Ich habe mich schon lange nicht mehr damit beschäftigt, habe zu viel Anderes zu tun im Moment.
  22. Ich habe 1.15 auf den Red Brick und ich habe das gleiche. Wenn ich dann auch das Java program laufen lasse dan ist CPU 100% und wird fast nicht mehr idle. Ist ueber 30% Last fuer den brickd normal ? Und die CPU freq ist maximal Every 1.0s: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq red-brick: Thu Mar 26 16:58:26 2020 1008000
  23. Moin, Die Limits, die hier angegeben sind, kannst du mit einem Master Brick über USB erreichen, andere Verbindungen wie Ethernet, Wifi oder auch die HATs schaffen laut meiner ad-hoc-Tests weniger.
  24. Moin, Das Problem tritt anscheinend manchmal bei Perl auf. Teste mal das hier beschriebene Vorgehen mit den bei dir passenden Versionsnummern (also denen, die in /var/cache/apt/archives/ liegen). Gruß, Erik
  25. Firmwares: RS232 2.0 Bricklet 2.0.4 Make sure there are no glitches on TX line during configuration change Download: RS232 2.0 Bricklet
  26. Firmwares: RS232 2.0 Bricklet 2.0.4 Stelle sicher dass es keine Glitches auf TX gibt wenn die Konfiguration geändert wird Download: RS232 2.0 Bricklet
  27. Das müsste gehen, der IMU Brick gibt Heading (das ist der "Kompass-Wert"), Pitch (das wäre dein Schrägwinkel) und Roll (den nahe bei der Ausgangslage lassen, sonst wird das Fahren schwierig ) als Euler-Winkel aus, bei deinem Anwendungsfall solltest du theoretisch auch nicht in ein Gimbal Lock laufen. Durch die anderen Sensoren kann der Brick das korrigieren, wenn er gekippt wird. Gruß, Erik
  28. Hallo, ich möchte auf dem RED (aktuelles Image - 1.15(full) installiert und per apt-get update .... aktualisiert) das Modul 'screen' installieren. Zweck: Zugriff über PuTTY, starten von Programmen per screen-Terminals, die (Programme) nach dem Schliessen der Sitzung weiterlaufen sollen. Das Programm gibt bestimmte Meldungen permanent im Terminal aus und nutzt z.B.Multithreading mit Abfrage der Tastatur, so dass ich die eingebaute Methode - Start per 'nohup' - nicht nutzen kann. Die Installation läuft leider wg. eines perl-Moduls nicht durch. Fehlermeldungen als Anhang (auch den Reparaturversuch per apt --fixbroken install, apt-get -f install mit gleichem Ergebnis). Mir ist klar, dass das nicht das Problem des RED ist, sondern tiefere Linuxkenntnisse voraussetzt. Ich habe deshalb bereits in verschiedenen Linux-Foren gesucht und leider hat nichts gefruchtet (z.B. apt --fixbroken install, apt-get -f install, apt-get install rename u.a). M.E. muss ich diese Modul "austauschen"?! Ich hoffe, dass unter euch ein Linuxkenner ist, der mir helfen kann. Viele Grüße Jörg fix-broken.txt screen.txt
  1. Load more activity
×
×
  • Create New...