Posts by the_window_maker

    Mit all den falschen Einrueckungen??

    Sorry, ist beim hin und her kopieren passiert. Habe ich gerade korrigiert.


    Die Klasse erbt von SampleBase, und mir scheint dass die einen Parser fuer die Kommandozeile enthaelt.

    Parser? Keine Ahnung was das ist. im init-Teil der SampleBase taucht das Wort aber auf. Ich werde versuchen mich da schlau zu machen.


    Und ich wuerde sicherstellen dass der Code mit Python 3 ausgefuehrt wird!

    Läuft aktuell in Thonny auf 3.7.3. Wie kann ich das sicherstellen, wenn ich den Code auf den Headless Zero schiebe?

    Hallo zusammen,



    ich stehe mal wieder auf dem Schlauch. Ich habe ein 64 (breit) x 32 (hoch) RGB LED Matrix Panel, welches ich mit einem Adafruit Bonnet auf einem Zero betreiben werde (aktuell ist das Bonnet auf einem RPi 4 aufgesteckt, wegen der GUI (Thonny)). Ich benutzte die Bibliotheken von hzeller (rpi-rgb-led-matrix). Die samples lassen sich starten. Aktuell gibt es noch etwas flackern, weil das Netzteil noch etwas schwach auf der Brust ist - aber grundsätzlich geht es. Nun zum Problem: Ich arbeite mich gerade noch in das Thema Klassen in Python ein und habe mir zunächst mehr schlecht als Recht folgenden Code von verschiedenen Quellen zusammenkopiert:




    Der Code geht auch soweit. Der Inhalt ist sinnfrei, aber es geht ums verstehen. Hat jemand von euch auch ein "breites" Display und arbeitet mit dem Code von hzeller (https://github.com/hzeller/rpi-rgb-led-matrix)? Mein Hauptproblem ist, wie ich der Matrix die Breite des Panels übergeben. Default ist 32, ich habe aber 64. Bei den Samples kann ich mit dem Parameter --led-cols=64 die Panelbreite übergeben. Man kann wohl mit RGBMatrixOptions das Problem lösen - aber ich stehe da echt auf dem Schlauch wie das gehen soll.



    Muss ich die Matrix eigentlich immer als Klasse erzeugen?



    Entschuldigt bitte die wirre Fragestellung, aber im Moment sehe ich Fragezeichen an jeder Ecke...



    Gruß



    Christian

    Hallo zusammen,


    ich stehe mal wieder auf dem Schlauch: Ich möchte Daten in eine SQLite Tabelle schreiben, unter anderem auch Datumswerte (genauer "Zeitstempel"). Den Zeitstempel möchte ich aus einer Variablen übergeben. Aktuell sieht das so aus:


    Meine Ausgabe sieht so aus:


    Code
    >>> %Run zeit.py
    <class 'datetime.datetime'>
    2021-06-18 23:37:09.391385
    <class 'str'>
    Traceback (most recent call last):
      File "/home/christian/Nextcloud2/python/zeit.py", line 22, in <module>
        cursor.execute(sql,werte)
    sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 26 supplied.


    Ich vermute, es hat damit zu tun, dass er irgendwie nicht mit dem Datetime Format zurecht kommt. Deshalb dachte ich mir, dass ich es zunächst in einen String umwandle. Ich stehe mal wieder auf dem Schlauch...

    Danke für eure Hilfe! Ich habe versucht ein kleines "Workaround" zu bauen um das Problem zu beheben. Ich habe aber Probleme mit der Ergänzung der geschweiften Klammern...


    Hier der Code:




    Mein Problem ist das wieder einbauen der geschweiften Klammern (siehe "# geschweifte Klammer wieder ergänzen"):


    Grundsätzlich werden die Einträge in der Liste auch wunderbar durchsucht, es wird jedoch die geschweifte Klammer nicht eingefügt.


    Ziel ist folgendes: Ich möchte, egal wieviel Geräte bei Powerfox angemeldet sind, immer zunächst die Gerätegrunddaten auslesen. Bei zwei Einträgen fehlen nur die beiden geschweiften Klammern "in der mitte" nach dem Trennen. Bei mehreren Einträgen fehlen diese dann dementsprechend öfter. Anschließend möchte ich die "aufbereiteten" Listen in Listen mit Dictionaries umwandelt. Damit die als Dict erkannt werden, müssen jedoch noch die geschweiften Klammern angefügt werden.


    Die Ausgabe sieht im übrigen wie folgt aus:


    Hallo zusammen,


    ich stehe mal wieder auf dem Schlauch. Ich habe seit gestern Nacht meinen Powerfox Stromzähler angeschlossen. Dieser ist per API auslesbar. Mein requests.get liefert mir folgende Ausgabe:


    Code
    {"Outdated":false,"Watt":743.0,"Timestamp":1621611170,"A_Plus":93539.0,"A_Plus_HT":53290.0,"A_Plus_NT":40249.0,"A_Minus":0.0}

    laut "type" handelt es sich um einen String:


    Code
    <class 'str'>

    Aber das sieht doch für mich eindeutig nach einem Dictionary aus, oder bin ich total bescheuert...? Kann ich den String in ein Dictionary "wandeln"?


    Danke und Gruß


    Christian

    Mit "sudo" zeigt sich das gleiche/ähnliche Fehlerbild...

    Servus Hoschi,

    ja, das wäre wahrscheinlich in der Tat hilfreich gewesen. Sorry, war spät gestern.


    Schönen guten Abend zusammen,


    ich bin es mal wieder. Dieses mal mit folgender Problematik: In Python kann ich das RPi.GPIO Modul nicht installieren (weder über thonny, noch über die bash). Es bricht immer mit einer Fehlermeldung ab. Nachdem ich das System aufgesetzt hatte, habe ich mit "pip3 install" lediglich thonny installiert. Thonny funktioniert auch. Nur eben das GPIO Modul macht Schwierigkeiten. Hat jemand eine Idee? Leider muss es in diesem Fall Ubuntu sein, weil ich aus bestimmten Gründen ein 64 Bit OS brauche, welches ZFS unterstützt.


    Gruß


    Christian

    Schönen guten Abend euch!

    ich sitze gerade an Fritzing um die Platine für mein kleines Projekt zu entwerfen und wollte euch folgendes Fragen: Der Pico soll am Einsatzort möglichst ohne Netzteil betrieben werden. Ich habe da an einen kleinen Akku gedacht. Schön wäre es, wenn eine Funktionsdauer von 4 Wochen zu erreichen wäre. Neben dem Pico gibt es auf der Platine noch einen Temperatursensor DS18B20 und einen BME280 sowie ein kleines OLED Display.


    Mir ist klar, das ich die Akkus nicht direkt an den Pico anschließen kann. Wie stelle ich sicher, das die benötigten 5V und nicht mehr am Pico anliegen? Im Netz habe ich Infos zu Ladeplatinen gefunden - soweit ich das verstanden habe, sind die aber nur für das Laden des Akkus (z.B.) über USB verantwortlich. Das Bauteil, das den Eingangsstrom vom Akku zum Pico regelt heisst Spannungswandler, oder? Gibt es da kombinierte Bauteile die ihr empfehlen könnt. Ich hänge in der Sache leider etwas in der Luft...


    Beste Grüße


    Christian

    Hallo Dennis,


    nochmals Danke für die Korrekturen am Code. Ich war der Meinung, dass ein " if __name__ == '__main__':"- Block bei rein funktionaler Programmierung nicht erforderlich ist. Aber wahrscheinlich sollte man sich sowas grundsätzlich angewöhnen - dürfte wohl der bessere Stil sein. Die schlampigen Variablen-Bezeichnungen sind dem geschuldet, dass ich die Woche immer nur Abends für ein paar Minuten Zeit hatte an dem Projekt zu arbeiten. Für den Fall, dass du wissen möchtest, für was das Teil eigentlich gut sein soll:


    Problem-Ausgangsstellung: Du hast Fensterelemente, an denen im Randbereich im Winter Kondensat und/oder Schimmel entsteht, bist aber der Meinung dass du ausreichend Lüftest und im Raum herrschen meistens nur um die 40% relative Luftfeuchtigkeit im Winter. Du fragst dich, liegt es am schlechten Bauteil Fenster/Fensterleibung oder Lüftest du vielleicht tatsächlich zu wenig.


    Lösung: Den Pico möglichst mitten im Raum aufstellen und den DS18B20 im Bereich des Schimmels befestigen und laufen lassen.


    Was macht das Skript: Der BME liefert die relevanten Raumklimadaten, nämlich Temperatur und (relative) Luftfeuchtigkeit. Je nach Temperatur kann die Luft unterschiedlich viel Wasserdampf aufnehmen (jedoch nie mehr als bis zur Sättigung). Der Sättigungsdampfdruck einer Temperatur lässt sich in den üblichen Temperaturbereichen verhältnismäßig gut ausrechnen (Formel nach Magnus Tetens). ps bedeutet druck p und s ist Sättigung :)


    Jetzt wissen wir, dass zum Beispiel bei 20°C er Sättigungsdampfdruck bei ca. 2330 Pa liegt. Gleichzeitig kennen wir die relative Luftfeuchtigkeit. Beträgt diese zum Beispiel 50%, so beträgt der tatsächliche Dampfdruck (pt) 2330 * 0,5 = 1165 Pa.


    Man kann davon ausgehen, das der Dampfdruck im Raum relativ gleichmäßig verteilt ist. Das bedeutet, die 1165 Pa liegen auch am Schimmelbereich an. Wir kennen die Temperatur am Schimmelbereich (die liefert uns der DS18B20 am Kabel) und können dort ebenfalls den Sättigungsdampfdruck ausrechnen. Liegt der Ps im Schimmelbereich aufgrund der niedrigeren Temperatur zum Beispiel bei 1456 Pa, kann man die beiden Drücke ins Verhältnis setzen, sprich den tatsächlichen Druck (=Wasserdampf im Raum) mit 1165 / 1456 Pa max möglicher Druck an der Schimmelstelle = 0,8. Sprich im Schimmelbereich ist die Luft zu 80 % gesättigt. Und das langt zum Beispiel schon für Schimmelwachstum. Die Zahlen zeigen, das im vorliegenden Fall, trotz "Normklima" im Raum, Schimmel nicht zu vermeiden ist -> Das Problem liegt im Fenster/Wandbereich.


    Sinn machen solche Messungen logischerweise nur im Winter. Damit das ganze auch noch nachvollziehbar ist und nicht nur eine Momentaufnahme darstellt, sollen die Werte noch im 5 Minuten Takt geloggt werden.


    Ist vielleicht eine relativ spezielle Anwendung und mit Sicherheit nicht für jeden interessant. Wer schon mal Diskussionen über die Kostenbeteiligung einer Schimmelbeseitigung geführt hat, wird sich aber vielleicht dafür interessieren.


    Ich würde das Projekt grundsätzlich gerne voran treiben und auch der Öffentlichkeit zur Verfügung stellen wollen. Ich halte sehr viel vom Open Source Gedanken...


    just my 2 cents...


    Christian


    PS Sollte nicht belehrend klingen, wollte nur anständig erklären was das ganze soll, wenn du dir schon die Mühe machst, den Code zu korrigieren ;)

    Hallo zusammen,


    hier, wie versprochen, die Fritzing Darstellung und noch mal zwei Bilder mit laufendem Display und Detailaufnahme vom Display. Ich hatte leider noch keine Zeit, dem Programmcode zu hübschen. Das ist meine nächste Aufgabe. Vorher möchte ich noch das Logging im Skript integrieren. Sobald ich den Code in hübsch habe, zeige ich euch mein "Kunstwerk". Leider waren in Fritzing nicht genau die Bauteile enthalten, die ihr im Bild seht. Mir ging es dabei vor allem um die Anschlüsse. Parallel werde ich anfangen, die Platine zu entwerfen. Gibt es dazu für Fritzing eine "Best-Practise-Empfehlung" oder ein Tutorial, welches ihr empfehlen könnt?


    Gruß


    Christian

    Hallo

    Die I2C Adresse des BME 280 ist 0x76 oder 0x77 die Adresse des OLED Display 0x3C für beides reicht ein I2C Kanal locker, warum dann Kanal 0 oder 1

    Um ehrlich zu sein weiss ich nicht, wie ich die Schalten müsste. GRD und Spannung ist klar. Aber darf ich SDA und SCL einfach zwischen den Komponenten verbinden (vergleichbar mit der Datenleitung eines DS18B20? Ich meine mich erinnern zu können, dass ich das sogar probiert hatte, aber dann wegen einer Fehlermeldung auf den zweiten Bus gewechselt bin.


    Spricht abgesehen davon dass ein Bus "unnötig" verbraucht wird, etwas dagegen, zwei Busse zu verwenden?

    Hallo, ich habe gerade die Klammer hinter oled.show() und jetzt geht es! Hipp Hipp Hurra!! Danke euch!


    Ich lasse des Pico jetzt mal bis morgen, losgelöst vom Rechner, laufen und schaue ob es Probleme gibt. Wenn nicht, würde ich morgen dann auch in Fritzing mein Glück versuchen und die Schaltung dort aufbauen. Vom Platinendesign in Fritzing habe ich überhaupt keine Ahnung. Ich werde euch aber mal meine Ergebnisse zeigen. Das Fehlerpotenzial ist mit Sicherheit hoch in dem Bereich.

    Hallo zusammen,


    ich baue gerade parallel zu meinem Projekt am RPi4 noch mit an einem Klima-Daten-Logger auf Basis eines Picos. Ich habe dort via I2C neben einem BME280 auch ein OLED Display SSD1306 verbaut. Folgendes Problem: Der Code läuft ohne Fehler durch, die BME280 Werte werden auch ausgelesen, nur das Display zeigt nichts an. Verwende ich die gleichen Parameter für ein Skript, welches nur nur das Display anspricht, werden Daten angezeigt. Ich habe euch mal ein paar Aufnahmen von der "Verdrahtung" gemacht. Und hier noch der Code, welcher leider keine Ausgabe auf dem OLED macht:



    Bitte nicht daran stören, dass ich den Code noch nicht ordentlich kommentiert habe. Ich wollte das machen sobald die Komponenten alle verbaut sind und dann auch eine ordentliche Projektvorstellung machen.


    Folgender Code funktioniert bei gleicher Verkabelung wunderbar (sinnfrei, habe ich nur für Testzwecke erstellt bzw. "ergoogled"):


    Ich denke es hat damit zu tun, das ich einmal den Kanal 0 und einmal den Kanal 1 anspreche (wird das Kanal genannt?)? Eigentlich sollte man die Bauteile bei I2C doch auch "Bus-mäßig" schalten können, oder?


    Vielleicht hat jemand von euch eine Idee dazu...


    Schönen Abend noch!


    Christian

    Hallo zusammen,


    schon wieder ich :) Diesesmal folgende Frage: Ich lasse ein Programm (Python) auf einem headless Zero laufen. Der Start erfolgt über SSH mit Konsole. Das Skript macht was es soll und loggt zum Beispiel in einer Datei Daten, etc. Fehler sollen auf der Konsole ausgeworfen werden. Besteht die Möglichkeit, das ich das Programm starte, die SSH verbindung beende und später wieder mit SSH auf den Rechner gehe und dann die gleiche Konsole sehe?

    Hallo zusammen,


    ich habe folgende Frage: Wenn ein Skript läuft (Konsole) und ich es mit strg+c beende, besteht dann die Möglichkeit, trotzdem noch einen Rest des Codes ausführen zu lassen? Für mein Verständnis nein. Mir geht es dabei um folgendes: Ich schreibe gerade an einem Skript, was Temperaturen und Luftfeuchtigkeiten loggt. Sobald das Skript gestartet ist, schaltet eine rote LED ab und eine grüne LED an. Was ich gerne hätte wäre folgendes: Wenn ich das Script mit strg+c beende, sollen die LED ausgehen oder zumindest einen definierten Zustand einnehmen. Mein Workaround dafür wäre, die Taste 'q' während der Ausführung abzufragen und sobald ich die Taste drücke, werden die LEDs dementsprechend geschalten. Ist vielleicht eine dumme Frage und ich kann mir die Antwort vorstellen, aber vielleicht gibt es ja so eine Art "Notfall-Code" der in so einem Fall ausgeführt werden kann.


    OT: Die Messwerterfassung läuft mittlerweile gut, die kommenden Tage werde ich das Skript noch erweitern, damit Berechnungen mit den Daten angestellt werden. Sobald das Funktioniert werde ich mal mein Projekt vorstellen. Es geht um Schwitzwasserbildung im Leibungsbereich bei Fenstern und um die Überprüfung, ob Kondensatfreiheit (trotz Lüften) gewährleistet werden kann.


    Gruß


    Christian