Batteriespannung mit Python3 und MCP3208 überwachen, Last spannungsabhängig über Relais schalten, BME280 für Luftdruck, Temperatur und Luftfeuchte als Webseite anzeigen lassen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Bekommst du eigentlich mit was du für Paste quatscht?

    Wenn du mit dem Finger auf andere zeigst und sagst:

    Mir ist es Egal ob du auf RPI.GPIO stehst, aber dein Programmcode ist reichlich ineffizient, und im möglichen Edit viel zu schwer zu ändern.

    Da dein MAIN nur strukturiert abläuft, und keine Elemente der OOP verwendet, gibt es noch reichlich Möglichkeiten deine Python Codes effizienter und besser Editierbar zu gestalten.

    und dann aber wieder das Gegenteil behauptest:

    Ich habe niemals gesagt, oder behauptet, dass hier eine OO Lösung zu einem kürzeren und effizienteren Programmcode führen würde.

    Behaupte ich einfach mal frecherweise das du dich selbst Übertreffen willst und dich selbst gerne reden hörst.

    Wenn du allerdings die Triggerschiene fahren willst, bitte.

    So dumm wie ich's brauch kannst du mir nicht kommen.

  • Batteriespannung mit Python3 und MCP3208 überwachen, Last spannungsabhängig über Relais schalten, BME280 für Luftdruck, Temperatur und Luftfeuchte als Webseite anzeigen lassen? Schau mal ob du hier fündig wirst!

  • Beitrag von SteepBrook64153 (8. Juli 2021 um 21:17)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • aber dein Programmcode ist reichlich ineffizient

    um das mal wieder auf eine sachliche Ebene zu bringen, hab ich hier eine Story zum Thema Effizienz:

    Ich hatte mal die Aufgabe den Spaghetti-Code eines Monster-Programms einer Laborratte in ein C++ Testprogramm umzuschreiben das 'effizient' in der Produktion verwendet werden kann. Und wenn ich effizient sage, meine ich dass jede Sekunde in der Produktion zählt und kostet. Nachdem wir das Programm 1:1 von HP Vee in C++ umgewandelt hatten waren wir überrascht wie wenig schneller der Code in C++ lief... nur wesentlich zuverlässiger. Mein Kollege hat sich dann die Mühe gemacht die reinen Berechnungen des C++ Codes zusammenzurechnen. Ich war geflasht, auf unserem PC war die reine Rechenleistung nur 0.1 Sekunde auf 5 Minuten Testzeit! Da wussten wir dass wir nicht beim Programmierstil ansetzen mussten sondern an den Algorithmen. Eine Sauarbeit! Wir haben dann die Testzeit auf 30 Sekunden verkürzen koennen, was ein Faktor 10 ist. Eine immense Kostenersparnis, wenn man 100000 St. eines Produkts pro Woche herstellen muss.

    Ich verstehe nicht warum du die "Effizienz" des Programmcodes von jemandem, der sich ganz klar als nicht-professioneller Programmierer erklärt, kritisierst.

    BTW, das Zitat oben kommt bei mir eindeutig als Kritik rüber, auch wenn du das jetzt wieder nicht so verstanden haben willst.

  • Da dein MAIN nur strukturiert abläuft, und keine Elemente der OOP verwendet, gibt es noch reichlich Möglichkeiten deine Python Codes effizienter......

    dieser Satz drückt aus das du mit OOP effizienteren Code schreiben kannst.

    Oder anders ausgedrückt:

    "Da du keine Elemente der OOP verwendest, gibt es noch reichlich Möglichkeiten deine Python Codes effizienter zu gestalten."

    Zeig her deinen Code und Lenk nicht schon wieder ab.

    Also lass die Leute einfach mal in Ruhe, wenn du alles offensichtlich besser weist.

    Du bist doch derjenige der versucht die Leute zu triggern. Hast du kein Selbstwertgefühl damit du andere anmachen musst?

    Alles was du kannst ist Paste quatschen.

    Schön dick auftragen.

    Wenn du noch Druckerpatronen brauchst kannste bescheid sagen. Ich sponsore dir welche. Vielleicht treffen wir uns Mal und zeigen uns unsere hard printed Forumsauszüge. So wie früher mit den Stickeralben. Für dich entwerfe ich extra ein Hologramm oder klebe noch ein paar wackelt Augen drauf, vllt bekommst du auch noch was plüschiges. Dann können wir DIN A4 Seiten tauschen. Ich bring auch Schutzfolie mit.

    Zudem kannst du mich melden so oft du willst.

    Verklag mich.

    Aus dir kommt nur heiße Luft. Pass auf das es nicht zu sehr pfeift beim Paste quatschen sonst schäumt noch was über.


    Tut mir echt leid fred0815

  • Also ich nutze für bestimmte Aufgaben lieber RPi.GPIO, da es effizienter als gpiozero ist.

    Letztendlich nutzt gpiozero das RPi.GPIO Backend oder andere verfügbare. Letztendlich kann es nur ineffizienter sein.

    Das haben Wrapper so an sich. Es geht bei gpiozero aber auch nicht um Effizienz, sondern um die API.

    Es ist immer die Frage, was mehr kostet: Laufzeit oder Entwicklerzeit?

    • Offizieller Beitrag

    Ich habe was die Zeit betrifft, zwischen gpiozero und RPi.GPIO bisher nur einen Unterschied festgestellt und das ist die mit gpiozero etwas langsamere Initialisierung eines Skripts beim Start. Wenn das Skript erstmal läuft, macht es IMHO keinen Unterschied mehr. Vielleicht ist mir auch nur nichts weiter aufgefallen als dieser kleine Makel. :daumendreh2:

    Wenn nur mal eben ein Skript zum Schalten von irgendwas gestartet werden soll, durchläuft und sich wieder beendet, dann ist die Nutzung von RPi.GPIO durchaus effizienter.

    Ich schrieb bewusst Zeit und nicht Effizienz, weil Effizienz ja für jede Anwendung oder jeden User etwas anderes bedeutet. ;) Meiner Meinung nach wäre für zeitkritische Projekte ohnehin pigpio besser geeignet (auch mit gpiozero als API möglich), ist aber hier wohl eher nicht nötig.

  • Ich habe was die Zeit betrifft, zwischen gpiozero und RPi.GPIO bisher nur einen Unterschied festgestellt und das ist die mit gpiozero etwas langsamere Initialisierung eines Skripts beim Start.

    Den Unterschied dürfte man nicht mehr merken, wenn man eine SSD/HDD nutzt.

    Wenn man eine SD-Karte nutzt, merkt man auch, dass die Imports lange dauern können.

    Ich habe z.B. ein Projekt mit fastapi und da merkt man den Unterschied ziemlich stark.

    Ladezeit auf dem Desktop: kaum spürbar

    Ladezeit auf dem RPI0 mit SD-Karte: ca. 10 Sekunden

    Spielt letztendlich aber keine Rolle, da der Dienst nur einmal gestartet wird und dann so lange läuft, bis der RPI0 heruntergefahren wird.

    Möchte man hingegen Python-Programm andauernd starten, will man die Importzeit verkürzen, in dem man z.B. externe Abhängigkeiten vermeidet.

    Kann man auch auswerten:

    Python: ff.py
    from fastapi import FastAPI
    import pydantic
    Code
    python3 -X importtime ff.py

    Wie man sehen kann, werden viele Dateien geladen. Auf einer SSD merkt man das nicht.

  • Bei mir läuft das alles via overlay-FS im RAM, schon alleine um die SD zu schonen.

    Möglicherweise hat ja jemand bis nächsten Donnerstag einen überarbeiteten Code parat, dann wäre das Thema sowieso erledigt.

    :bravo2:

    [OT]Ich quetsche mir zu meinem Essen jetzt noch den Rest Senf_aus_der_Tube.[/OT]

    Mahlzeit und Zwinkersmilie

  • Lieber fred,

    die Funktion xfer2() sendet ja ein Byte-Array, mir ist leider dennoch nicht so ganz klar was diese beiden Zeilen aus der MCP3208.py genau machen, außer das alles zur Vereinfachung in Variablen gespeichert wird und Bytes scheinbar geshiftet werden. Ich als alter Mann würde mich daher sehr darüber freuen, falls du mir und meinem alten Hirn kurz auf die Sprünge helfen könntest :D.

    adc = self.spi.xfer2([ 6 | (channel&4) >> 2, (channel&3)<<6, 0])
    data = ((adc[1]&15) << 8) + adc[2]

    Edit:

    Das spielt sich ja in der read() Funktion ab, die Werte werden also vom MCP eingelesen/ausgelesen. Aber ist das dann nur für den Channel 0 definiert oder wo werden die anderen beiden Kanäle ausgelesen?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!