Merci vielmohls - damit sind zwei Probleme gelöst: OB die Hardware da und am Leben ist und um welche Hardware es sich handelt. Ich denke, ich werde nicht drum herum kommen, dass mein Nutzer die Geräte manuell identifiziert (aus den udevadm Infos) und dann in der Datenbank abspeichert.
Posts by DJ1NG
-
-
Schau Dir auch mal die udev rules an. Damit kann man bestimmte USB-Geräte an bestimmte device-namen binden. ANsonsten kannst Du vielleicht auch Dein Gerät anhand der Seriennummer binden, und zwar hier: /dev/serial/by-id/ (falls es ein Serielles Device ist, wie ttyUSB* oder ttyACM*).
Das ist ja gerade das Problem. Ich kann nicht sagen, welche Geräte meine Benutzer an den PI anschliessen - weder Hersteller noch Type etc. Das muss offen bleiben. Ich denke, mit den Infos aus dem udevadmin werde ich zurecht kommen (müssen). Denn diese sind ja nur vorhanden, wenn das gerät auch angeschlossen ist. Danke dennoch.
-
Servus zusammen,
an meinem PI schliesse ich USB-geräte an - wie beispielsweise eine GPS-Mouse oder einen LoRa-Transceiver.
Manuell kann ich sie finden und zuordnen. Der GPS-Reciver hängt an /dev/ttyACM0 und der LoRa-Transceiver an /dev/ttyACM1.
Hintergrund:
Wie aber kann ich ermitteln, ob diese Gerät auch funktionieren? Ich würde für eine Web-Oberfläche gerne dem Benutzer abnehmen eingeben zu müssen, an welchem Port das jeweilige Gerät hängt. Denn ich hatte bei meinen Tests schon den Fall, dass der LoRa-TRX gestern an ttyACM0 und heute an ttyACM1 zu finden war. Das will ich meinen Benutzern nicht zumuten.Ich habe die Anschlussnamen in einer Datenbank hinterlegt, damit sie meine Anwendung jederzeit schnell abrufen kann.
Wie ermittle ich aber, ob das jeweilige Gerät sich auch am bewussten Anschluss befindet - vor allem wenn bei der Installation des Systems noch nicht bekannt ist, welche Geräte angeschlossen werden? Es gibt in diesem Bereich (GPS und LoRa) eine Menge unterschiedlicher Hardware.
Sprich: Mein Benutzer installiert das System - und dieses sagt ihm dann: "Achtung, ich habe an diesem Port dieses Gerät und an jenem Port ein anderes Gerät gefunden. Ist das richtig so?"
Das Ganze muss Hardware-unabhängig funktionieren - also auf jedem PI und auch mit zusätzliche USB-Hubs.
Kann ich das irgendwie automatisieren?
-
Deine genutzte Bibliothek nutzt aber schon die hinterlegten Korrekturdaten, oder ?
Die BME280 werden im Werk durchgemessen und Abweichungen werden in einem Speicher abgelegt. Die sollten schon berücksichtigt werden.Ähm ... in dem Script, welches ich verwende werden folgende Bibliotheken / Module genutzt:
smbus, time, datetime, subprocess, ctypes
Wenn ich wüsste, welche Bibliothek welche Daten nutzt, würde ich vermutlich nicht fragen. -
Servus zusammen,
nach mehreren Versuchen habe ich endlich zwei BME280 gefunden, welche ich zusammen betreiben kann, weil bei dem einen die Adresse per Schalter umstellbar ist. So weit, so gut.
Nun betreibe ich beiden Sensoren zusammen - und stelle fest, dass sie - trotz unmittelbarer Nähe und dem exakt gleichen Programmcode - unterschiedliche Feuchtigkeitswerte anzeigen - sieh die beiden nachfolgenden Bilder:
Kategorie Thermo Pro Einzelgerät Billig-Sensor [Anzeige] Teurer Sensor [Anzeige] Temperatur 23,1 23,54 22,93 Luftdruck n/a 966 966 Feuchtigkeit 48 46,55 57,62 Die Tabelle zeigt: In Sachen Temperatur liegt der teure Sensor näher dran - und Sachen Luftfeuchtigkeit liegt er aber um 10% höher als die beiden anderen!
Im Endeffekt ist es mir ja egal, wer was anzeigt - und ~0,5 °C sind kein Grund zur Aufregung
aber 10% Feuchtigkeit mehr oder weniger ist schon dumm - vor allem weil der eine Sensor im Gehäuse mit dem Raspberry PI sitzen soll und der andere aussen als "Wetterstation" arbeiten soll.Und wem darf ich nun trauen? Sollte ich den teuren Sensor um 10% in der Feuchte nach unten ziehen? Oder kann ich etwas anderes "kalibrieren"?
-
Internet ist groß und Suchmascinen gibt es auch , und soviele unterschiedliche BME 280 Boards gibt es auch nicht.
Ernsthaft jetzt???? Ich bin im Internet seit den 80er Jahren des letzten Jahrhunderts zuhause und kenne Suchmaschinen seit dem ersten Webcrawler. Und tatsächlich habe ich jetzt 10 Minuten gebraucht, um den Hinweis, welchen Du gegeben hast, zu finden, da Du ja leider keine Quelle verlinkt hast.
Aber macht ja nix .... hauptsache den Schulmeister spielen müssen!

-
Was ist mit i2cdetect -y 0, i2cdetect -y 1 oder i2cdetect -y 2 ? Der Zähler fängt imho auch hier bei 0 an.
Das war bei den alten PI so. Bei den neueren fängt der Bis mit 1 an.
Meinen Sensoren lag leider keine Anleitung dabei, so dass ich nicht wusste, dass ich die Adresse ändern kann auf dem Board. Leider habe ich gerade keinen Lötkolben zur Hand. Werde ich morgen erledigen und mich rückmelden. In meiner Firma habe ich alles, was ich benötige.
-
Display More
funtktioniert, wie ich es brauche
Was, ausgerechnet das nimmst du?


Nichts gegen Dich Der_Imperator aber wie Du selber schrubst
Meine Python Skils sind sicher noch schlechter
dem ich nicht widersprechen werde.

DJ1NG Bitte teste wenigstens eines von den Skripten, die __blackjack__ vorgeschlagen hat. Die sind um einiges pythonischer als eine Wahl.

Ich habe Deins genommen.

-
Danke für den Input ... schaue ich mir an, weil leider auch mein Testpi hier auf hochtouren läuft ... er soll aber so wenig wie möglich Strom verbrauchen.
Inzwischen klappt alles, so wie ich mir das Vorstelle .... und der Pi merkt das noch nicht einmal mit dem Service

-
Servus Kollegen,
Ich habe nach folgender Anleitung einen zweiten I2C-Bus installiert: https://www.laub-home.de/wiki/Raspberry_Pi_multiple_I2C_bus
Dann habe ich am normalen I2C-Bus einen BME280 und am zweiten Bus einen gleichen Sensor angeschlossen.
mit i2cdetect -l werden beide Busse gefunden - jedoch nur der Standard-Bus findet einen Sensor (ID 76). Wenn ich nun mit i2cdetect -y 3 den zweiten Bus (No. 3) durchscanne, wird kein Sensor gefunden.
Ich habe die Verkabelung, Strom etc mehrfach geprüft - und die Sensoren untereinander getauscht: Der Fehler bleibt auf dem Bus No. 3
Any ideas?
-
Daaaanke ... funtktioniert, wie ich es brauche.

-
Servus zusammen,
meine Python-Skills sind leider mehr als nur dürftig.
Meine Anforderungen:
Ich möchte einen Schalter überwachen, welcher über GPIO27 nach GND schaltet und dessen Zustand (Aus = 0 / Ein = 1) in eine Textdatei schreibt. Dieses Script soll bei Systemstart gestartet werden und im Hintergrund ständig laufen. Damit soll konkret der geöffnete/geschlossene Gehäusedeckel überwacht werden!
Dazu habe ich mir in meiner Unbedarftheit folgendes Script zusammengestoppelt:
Python
Display Morefrom gpiozero import Button taster = Button(27) while True: if taster.is_pressed: gpio = open('/var/www/html/gpio/gpio_27','w') gpio.write('1') gpio.close() else: gpio = open('/var/www/html/gpio/gpio_27','w') gpio.write('0') gpio.close()Wenn ich die Schleife jeweils mit exit() verlasse, wird der Wert in die Datei geschrieben.
Wenn ich die Schleife nicht verlasse, sondern so arbeite wie vorstehend, wird nichts geschrieben - und die Datei bleibt leer. D.h. sie wurde geöffnet zum schreiben und damit der Inhalt gelöscht.Ich bin einigermaßen verwirrt.
-
Und ich freue mich gerne auf Empfehlungen für Bibliotheken und deren Anwendung, wenn man damit das von mir beobachtete Problem korrigieren kann.
-
-
Servus,
in meinem Projekt Notfallbox möchte ich in der Zukunft mit GPIO-Sensorik arbeiten. Zum Testen - und weil es meine ersten Anforderungen sind - habe ich mir einen 5er Pack DHT22-Sensoren bestellt. Nun habe ich einen solchen angeschlossen, und lese mit einem simplen einfachen Python-Script den passenden GPIO aus.
Nun zeigt sich aber, dass der DHT22 zwar die Temperatur korrekt anzeigt (im Vergleich mit einem Temperatur-/Feuchtigkeitsdatenlogger) - aber in Sachen Feuchtigkeit massiv lügt - und mal eben eine Differenz von schlappen +15 bis +20% zum realen Feuchtigkeitswert aufzeigt.
Ist der DHT22 nun defekt? Oder muss ich einen entsprechenden Korrekturfaktor später in mein Script (bin erst einmal nur am testen) selbst einpflegen?
Code
Display Moreimport time import adafruit_dht import board dht_device = adafruit_dht.DHT22(board.D4) while True: try: temperature_c = dht_device.temperature humidity = dht_device.humidity print("{:.1f} °c / {} %rH".format(temperature_c, humidity)) except RuntimeError as err: print(err.args[0]) time.sleep(60.0)Bitte jetzt nicht am Python-Script aufhängen. Es ist wie gesagt nur ein Test und wird später anders gelöst.
Aber es geht nun einmal darum, dass es doch schon einen Unterschied macht, ob in einem Gehäuse 50 oder 70% Luftfeuchte ist

Any ideas?
Danke, Guido
-
Man ... ich bin so blöd ... danke für den Hinweis. Natürlich einfach ins webroot mounten.
Und über Sicherheit will ich nichts hören, weil Sicherheit bei diesem System keine Rolle spielt. Daher bitte entsprechende Hinweise hinunterschlucken.
Thema damit erledigt. Danke
-
Servus Kollegen, ich bräuchte mal bitte wieder Euren weisen Ratschlag

In meinem Pi lasse ich über dieses Script hier per udev USB-Sticks mounten, wenn diese eingesteckt werden.
Funktioniert grundsätzlich.
Nun möchte ich aber über den Webbrowser auf die Dateien des USB-Stick lesend zugreifen.
Per PHP lasse ich die Dateien auflisten und auf einer Webseite darstellen. Der Code lautet:
Code
Display More$media = "/media"; if ($handle1 = opendir($media)) { while (false !== ($entry1 = readdir($handle1))) { if ($entry1 != "." && $entry1 != "..") { $usb = $media . "/" . $entry1; echo "Mountpoint: <B>$usb</B><BR>"; if ($handle2 = opendir($usb)) { while (false !== ($entry2 = readdir($handle2))) { if ($entry2 != "." && $entry2 != ".." && $entry2 != "lost+found") { echo '<A HREF="/media/' . $entry1 . '/' . $entry2 . '">' . $entry2 . '<BR>'; } } } } } closedir($handle1); closedir($handle2); }Nun ist es natürlich so, dass der Webserver (Apache2) den Downloadlink ab seinem Webroot setzt. Sprich: Auf die physikalische Datei unter (z.B.) /media/sdb1.ext2 kann ich nicht zugreifen.
Ich bin am hin und herrätseln, komme aber auf keinen grünen Zweig.
BTW: Bookworm, Apache2, PHP 8, MariaDB
Any ideas?
-
Zwischenbericht
Ich habe inzwischen das balena-Sound-System ausprobiert. Funktioniert nur mit Cloud-Unterstützung und kommt nach ausprobieren (nicht erfolgreich) nicht in Frage.
Inzwischen habe ich mit dem MoOde-Audioplayer ein Multiroom-System aufgesetzt, welches zumindest mal die Daten streamen kann - leider kommt am Client keine Musik heraus, obwohl Daten empfangen werden.
Mit den Menschen im Moode-Forum bin ich schon zugange https://moodeaudio.org/forum/showthread.php?tid=7308, habe aber noch kein hilfreiches Feedback bekommen.
Trotz allem muss ich sagen: Furchtbares Drama!!! Da hat man nun einmal so schöne und einfache Rechner wie die PIs ... und dann ist das a) kompliziert und b) nicht erfolgreich.
Ich werde mir trotzdem kein Multiroom-System kaufen, sondern werde versuchen, dass mit lokalen Mitteln hinzubekommen, da ich schliesslich die komplette Hardware hier liegen habe.
-
Ja habe ich ... Volumio gefällt mir aber nicht, weil man dort mit einem Konto arbeiten muss. Und ich sehe nicht ein, dass ich einen lokalen Musikplayer irgendwo online anmelden muss, damit ich damit Musik abspielen kann - oder kennst Du eine Möglichkeit, dieses nicht tuen zu müssen?
Bisher lief mein Player nämlich tatsächlich schon mit Volumio - allerdings ohne Multiroom.
Ein zweiter Player an einem anderen Wohnort läuft problemlos mit moOde. -
Servus .... ich möchte zuhause einen Multiroomplayer aufbauen. Dieser soll in 3 Räumen Musik abspielen von USB-Festplatte, alternativ aus einer NAS.
Welche Software könnt ihr hierfür empfehlen?
Es stehen mir für das Projekt ein PI 3B mit HiFiBerry DAC, sowie zwei PI Zero W mit jeweils eigenen DAC zur Verfügung. Ein WLAN ist vorhanden.
Der PI 3B läuft aktuell mit moOde direkt an meiner HiFi-Anlage.