Posts by peuler

    Ich habe große Zweifel, ob man Dir mit den sehr wenigen Angaben überhaupt helfen kann. Es fehlt zum Beispiel die Beschreibung der Fehlermeldung. Woraus folgerst Du, dass die Lösung im erwähnten Listing zu finden ist? Und wie bist Du auf die vermutete Lösung gekommen?

    Meinen Raspberry Pi 2 betreibe ich mit einer maximale Auflösung von 1920x1080 @ 60 Hz. Mehr als die 60 Hz bieten die Einstellungen nicht an. Diese Auflösung funktioniert einwandfrei, ich bin damit sehr zufrieden.

    Naja, der komplette Code... dann würde ich den wohl als Datei reinstellen (müssen).

    Da mach Dir mal keine Gedanken: die Software des Forums kann das ab, dass Du hier den kompletten Quelltext postet - so viele Megabytes werden das nicht sein, oder? Falls Du doch Bedenken hast, kannst Du Dir ja eine Repository zum Beispiel bei Github anlegen und dann den Link daran hier posten.

    Ich bin nur kein Freund davon, Teile des Quellcodes zu sehen, wenn ich jemanden helfen soll.

    Mein Statement 1) über C++ bzw. C aus meinem Beitrag #6 muss ich wohl revidieren. Es sieht wohl doch nach C++-Code aus.

    Um Dir weiter helfen zu können, schlage ich vor, dass Du bei der nächsten Frage mal den kompletten Quelltext plus Compiler-Aufruf postest. Damit könnte man das Rätselraten eindämmen.

    Mir ist dies aufgefallen:

    1) Mit C++ hat der Quellcode nichts zu tun, das ist reiner C-Code (ist aber eine Randbemerkung).

    2) Es gibt keine if-Anweisungen sondern nur if-Abfragen (ist auch eine Randbemerkung).

    3) Ich verstehe nicht, wie der Quellcode überhaupt fehlerfrei kompiliert werden kann, da passt etwas mit der Variable dataMessage nicht. Von welchem Typ soll diese Variable denn sein? Ich wundere mich deswegen, weil die Variable mit einer Summe aus einem Integer und char-array belegt wird und das kann nicht funktionieren.

    4) Die Lösung zu dem Problem mit der verschachtelten if-Abfrage ist eine switch-Anweisung.

    5) Tipp #1 zu if-Abfragen: vermeide Abfragen wie if (sensors.getAddress(tempDeviceAddress, i)). Diese Abfrage ist zwar syntaktisch einwandfrei, vor allem für Einsteiger ist es aber besser, auf explizite Werte abzufragen. Also etwa if (0 == (sensors.getAddress(tempDeviceAddress, i)).

    6) Tipp #2 zu if-Abfragen: verwende die sogenannte Yoda-Schreibweise, benannt nach dem kleinem Knirps aus Star Wars. Yoda hat ja beim Sprechen die Reihenfolge der Wörter umgedreht und daraus leitet sich die Yoda-Schreibweise ab. Konkret bedeutet das also, dass gerade bei Vergleichen mit Konstanten die Konstante vor dem '==' steht und nicht danach. Die Yoda-Schreibweise hat den Vorteil, dass ein versehentliches '=' beim Kompilieren sofort auf einen Fehler läuft.

    Thomas220: Sofern das Thema für Dich erledigt ist, markiere den Beitrag bitte auch als erledigt.

    Du hast noch mindestens 1 Fehler im Vorgehen:

    Nach dem Kopieren der Service-Datei in das Verzeichnis

    /etc/systemd/system

    musst Du den Service noch aktivieren mit

    sudo systemctl enable AutoReifeschrank.service

    Erst dann kann systemctl den Service auch starten.


    Ferner ist mir ein Designfehler der Service-Unit aufgefallen. Du hast noch keinen Befehl für ExecStop eingebaut. Wenn Du den nicht explizit angibst, wird das Python-Programm per SIGTERM-Signal beendet, wenn der Dienst endet (zum Beispiel beim Neustart des Betriebssystem). Soll heißen, es wird unkontrolliert einfach vom Betriebssystem abgeschossen. Besser wäre es daher, dass Dein Python-Programm auf kontrollierte Art und Weise beendet werden kann. Eine Möglichkeit wäre, einen Signal-Handler zu implementieren, der das SIGTERM entgegennimmt und dann das Programm beendet.

    Zu dem Python-Code kann ich leider nichts sagen, das ist nicht meine Programmiersprache. Hier gibt es aber einige Experten, die dazu was sagen können.

    Dennoch habe ich den Tipp, dass Du den Source-Code nicht als Text-Datei an Deinen Beitrag anhängst sondern als Code einbaust. Das ist das dritte Symbol von rechts (sieht so aus: </>). Damit lässt sich der Source-Code leichter anschauen.

    Zu Deinem Projekt an sich: Es wäre hilfreich, wenn Du mal den Sensor nennst, mit dem Du die per Infrarot gesendeten Daten empfängst.

    Auf der Seite der Raspberry Foundation findet man hier Versionen des OS mit Stand 28.01.2022 sowohl auf Basis Buster als auch Bullseye. Leider ist die x86-Fassung des OS immer noch auf dem Sttand 11.01.2021.

    Zu Beitrag #22: Tja, da habe ich wohl nicht genau genug hingeschaut. Stimmt, er hat die 4,7 Sekunden angegeben. Damit ist wenigstens mal belegt, dass sein Pi auf 1 Kern funktioniert und so ganz kaputt kann er also nicht sein.

    Du kannst mal versuchen, mit einem kleinem Benchmarkprogramm Vergleichswerte betreff der Rechenleistung zu ermitteln.

    Hier findest Du einen C++ Quelltext eines kleinen Benchmarkprogramms.

    Eine Dokumentation dazu ist hier zu finden. Darin findest Du eine Anweisung, wie Du ein ausführbares Programm erstellst und auch Vergleichswerte zu verschiedenen Plattformen (eine davon ist ein Raspberry 2B).

    Mit dem Vergleichen der Durchlaufzeiten zwischen Deinem Raspberry Pi 4 und meinem Pi 2B sollte man zumindest erkennen können, dass Dein Pi 4 deutlich schneller läuft als mein 2B. Und Du kannst aus den Vergleichswerten mit 2 PCs, die in der Doku zu finden sind, einordnen, in welchem Verhältnis etwa Dein Pi 4 mit einem PC steht.

    Poste mal Deine Ergebnisse hier.

    Habe eben auch mal etwas geforscht, das /dev/audio ist wohl tatsächlich nicht mehr existent. Aber es scheint Alternativen zu geben. Siehe hier.

    Ich würde empfehlen, erst mal einen Sound mit Hilfe von Tools auszugeben, bevor ich ein C/C++-Programm schreibe. Eine Anleitung dazu habe ich hier gefunden.