Posts by Masterkennie

    Hallo,


    da ich bisher schon einige gute Hilfe hier in dem Forum erhalten habe bringe ich das Thema Rahmen bzw. Einbaublende für ein 1,3" OLED hier mal mit an evtl. kann mir jemand weiterhelfen.


    Ich benötige für meine 1,3" OLED´s Einbaurahmen oder eine Displayblende da ich nicht in der Lage bin einen Displayausschnitt so sauber hinzubekommen, dass es ansehnlich ausschaut und weil die reine Leuchtfläche des OLED´s kleiner ist als das Glas.


    Hat hier evtl. jemand die Möglichkeit oder Adressen wo ich derartige Rahmen möglichst in der Farbe reinweiß bekommen könnte?


    Im Netz habe ich bereits das hier https://deloarts.wordpress.com…9/04/oled-display-rahmen/ gefunden, allerdings habe ich keinen 3D-Drucker und wohne in einem 850Seelen Dorf auf dem Land - habe also leider keinen Copyshop mit 3D-Druckern in der Nähe.


    Evtl. gäbe es ja auch jemanden unter euch der mir nach Aufmaß einen 3D-Druck erstellen könnte? Oder im Netz gibt es fertige Blenden/Rahmen? Ich habe bisher mehrere Stunden an Google verbracht und bin nicht fündig geworden.


    Ich danke euch schon mal für eure Tipps :danke_ATDE:

    Moin Willi,


    gib doch mal ein paar Eckdaten wie du deine Klimadatenerfassung genau umsetzen möchtest. Dazu von mir folgende Fragen:


    - Möchtest du auf fertige Hardware/Sensorik inkl. Messwandlung und Datenübertragung zurück greifen oder z.B. per Arduino selbst Messtellen mit Visualisierung direkt an der Messstelle auf die Beine stellen?


    - Sollen die Daten langfristig gespeichert/archiviert werden?


    Ich bin selbst aktuell mit einem solchen Projekt beschäftigt. Allerdings funkt mir rein zeitlich derzeit noch unsere Haussarnierung immer mal wieder dazwischen weshalb meine Fortschritte derzeit etwas kleiner ausfallen. Des Weiteren lerne ich derzeit betreffend Python-Programmierung noch dazu was zu weiteren, zeitlichen Verzögerungen führt.


    Evtl. interessiert dich ja mein Projekt: Klimadatenerfassung mit Arduino-Nano und Raspi3 Drahtgebunden wobei ich aktuell am hadern bin ob ich ein neues Thema eröffne und das Alte auf "erledigt" setze da die eigentliche Frage in der Überschrift schon länger beantwortet ist und die Übersichtlichkeit derzeit arg gelitten hat. Am jetzigen WE mache ich mir dazu mal Gedanken und es gibt ein kleines Update betreffend der Umsetzung und aktuellen Erkenntnisse - aber nun genug "Eigenwerbung"....

    Aber Waldi, das ist doch schlichtweg nicht die Frage des TE´s gewesen. Dann hätte neben der Antwort "Identisch" auch kommen müssen, nimm einen Dell Poweredge R710, weil der Pi kein Ferrari ist und die anfallende Datenmenge nicht stemmen kann. Ist halt genauso an der Ursprungsfrage vorbei geholfen :^^:

    Ich kann da nur für mich sprechen, da ich u.A. die Erfahrung auch im Arduino-Forum gemacht habe. Nur ein Beispiel (ich will den Tröt vom Pono nicht sprengen): Wenn ich eine Frage zur Funktion Serial.readStringUntil() stelle, dann möchte ich nicht wissen dass diese Funktion nicht schön sei, den Programmablauf verlangsame oder den Nano überlastet oder es andere Funktionen zur Stringbehandlung gibt.

    Für mein Empfinden gehört auch die Erfahrung von Datenverlust zum Thema Basteln. Lass ihn doch seine eigenen Erfahrungen machen. Ich denke die Ausführung vom ThomasL ist am konstruktivsten. Der TE hat ja auch nichts davon geschrieben, dass er die Buchhaltungssoftware selbst schreiben wollte.

    Andreas nimm mir das bitte nicht übel, ich spreche damit nicht dich direkt an sondern es geht mir um´s Prinzip. :^^:


    Ich finde es immer interessant, wenn an den Fragen eines Forumsbenutzers vorbei geantwortet wird, die (wirklich wichtigen) Hinweise auf das Verhalten des PI´s bei Stromausfall und die, warum auch immer, begrenzte Anzahl an Schreibvorgängen mal ausgenommen. Ich spreche das bewusst an weil mir immer mehr auffällt, dass eine Fragestellung irgendwie nicht beantwortet wird sondern es kommen direkt Gegenargumente und Totschlagkriterien. Wenn Ponos den Pi für seine Aufgaben nutzen möchte, dann soll er doch :bravo2:


    Klugscheißermodus ON:

    Der TE fragt in diesem Fall welche der beiden SQL-Datenbanksoftwaresysteme wohl stärker an der Lebensdauer der SD-Card knabbert, die Antwort wäre ja m.E. ziemlich simpel gewesen: Identisch. Immer wenn aufgrund der Benutzereingabe ein Datensatz abgespeichert wird, greift das System schreibend auf die SD zu. Dabei spielt es keine Rolle ob es sich dann um MariaDB oder MySQL handelt.

    Klugscheißermodus OFF


    Eines frage ich mich allerdings seit Erwerb meiner ersten beiden Pi´s. Warum ist, oder soll, der Betrieb mit SD-Karten wenn oft schreibend darauf zugegriffen wird so riskant sein? Also, genauer, warum wird immer wieder die Lebensdauer der SD-Karte so kritisch erwähnt? Die Digicam legt Millionen Fotos auf der SD ab die beispielsweise vom PC aus gelöscht werden, auf dem Schmartfone (meines habe ich jetzt annähernd fünf Jahre) wird ebenfalls millionenfach schreibend auf die SD zugegriffen (WhatsApp-Anhänge, Mails, FB-Temdaten, Downloads aus Mails oder Internet usw.), meine SPS für die Heimautomation schreibt seit Jahren Prozessdaten im 24/7/365 Betrieb auf die SD-Karte. Wird das Ganze nicht eventuell etwas dramatisiert?

    Danke euch Beiden für die schnelle Antwort und die Tipps :danke_ATDE:


    dbv: Ja genau die. Ich hab schon eine ganze Weile Google bemüht, aber nicht´s fertiges gefunden. Was mich sehr wundert da diese OLED´s doch tausendfach- wenn nicht millionenfach im Einsatz sind.

    Hast Du schon bei thingiverse.com geschaut?

    Nein habe ich noch nicht, bisher nur Google bemüht.


    Okay, werde mal ein entsprechendes Thema im richtigen Thread eröffnen.

    Ich kann da dem fred0815 nur zustimmen, die bisherigen Informationen sind relativ dürftig.


    Ich konzentriere mich da erst mal nur auf die Drehzahlmessung:

    - Wie ist denn der derzeitige, analoge, Drehzahlmesser angesteuert? --> mechanisch mit drehender Welle --> elektronisch von der Motor-TCI / CDI?


    - Wenn elektronisch, dann hast du bereits irgendeine Art von elektr. Impuls den du beim Einsatz vom Pi zunächst auf GPIO verträgliche Spannungswerte (also <= 3,3V) bringen und dann auswerten musst.


    - Wenn mechanisch, neue Baustelle. Eine Möglichkeit: Du hast die Möglichkeit das Drehzahlsignal von einem der vier zur Verfügung stehenden Zündkabel zu entnehmen. Dazu wird die Sensorleitung einfach mit ein - drei Windungen um die Zündleitung zu einer der Zündkerzen gewickelt und die bei Zündung induzierte Spannung mit einer entsprechenden Schaltung im Nachgang als Drehzahlimpuls erfasst.


    - Was genau möchtest du an elektr. Energie erfassen, tatsächlich Stromverbrauch/Stromfluss/Leistung oder Arbeit?


    - Wie gedenkst du die Füllstände zu sensieren, stufenweise (z.B. mehrere elektr. Kontakte in den Tank gebohrt) oder mit Potischwimmern oder nur Digital "Leer/Voll"


    Das sind erst mal meine :2cents: dazu :)

    An dieser Stelle reihe ich mich mal mit ein. Ein, aus meiner Sicht, absolut tolles Forum mit vielen sehr hilfsbereiten und unterhaltsamen Mitgliedern.


    Habe das Forum selbst auch über Google gefunden. Wen wundert´s wenn bei mind. 7 von 10 Sucheingaben das https://forum-raspberrypi.de gelistet wird. Sehr schade dass jetzt aufgrund der neuen Forensoftware die Google-Links erst mal inne Dutten sind. Bin mal gespannt wie lange die Krake braucht um wieder up to date zu sein.


    An das Forum an sich: Weiter so :bravo2::danke_ATDE:

    Hallo meigrafd,

    ich danke dir bis dahin erst mal für deine Unterstützung :bravo2::danke_ATDE: Allen Anderen natürlich auch, das macht das Erlernen doch angenehmer :)


    So langsam wird mir einiges etwas klarer, ich werde deinen Code gleich heute Abend mal testen. Dann muss ich mir nur mal Lektüre betreffend des if __name__ == '__main__': vor Augen führen um zu wissen was dort genau passiert.


    Die Geschichte mit dem Inkrement var += 1 war mir zwar schon klar, aber ich hatte einfach nicht die Zeit den Code anzupassen. Es ist unter der Woche keine Gute Idee von mir gewesen sich mal eben zwischendurch nach Feierabend an ein "bisschen" Python zu setzen, daher war das alles bisher offensichtlich mit der Heißen Nadel gestrickt, das muss ich mir abgewöhnen; ich gelobe Besserung.

    Versuchs erstmal damit:

    Das haut nicht hin, ich hab zuvor auch schon festgestellt, dass leere Listen nicht akzeptiert werden:


    Code
    Start Measuring... please wait for 3.0 seconds...
    Traceback (most recent call last):
      File "ON_OFF_1.py", line 77, in <module>
        ReturnValue = Messung_Klimadaten(slave_number, client)
      File "ON_OFF_1.py", line 50, in Messung_Klimadaten
        Slave = LeseRegister(num, client)
      File "ON_OFF_1.py", line 37, in LeseRegister
        Slave[num] = client.read_holding_registers(0000, 4, unit=num)
    IndexError: list assignment index out of range


    So sieht übrigens der aktuelle Code aus, der unter Python3 auch funktioniert:


    Die Ausgabe sieht dann so aus:

    Nach dem "Badezimmer" wird dann versucht den dritten Slave zu erreichen, ich hab aber nur zwei Arduino´s am Bus (mehr hab ich derzeit auch noch gar nicht). Jetzt möchte ich einfach verhindern, dass das Script abgebrochen wird und er nach dem Timeout einfach von vorn mit den Messungen ab Slave1 beginnt.

    meigrafd:


    1.Ich habe Slave oben im Script definiert da eine leere Liste, also

    Slave[] zu einem Abbruch beim Laufenlassen des Scripts geführt hat. Fand ich auch seltsam.

    2. Die Verbindung öffne und schließe ich für jede Abfrage der Messwerte weil ich derzeit nicht sicherstellen kann dass das Script sauber durch läuft. D.h. stoppt der Interpreter aufgrund eines nicht erreichbaren Slaves, wird Client.close()nicht mehr ausgeführt. Ich wollte damit also erreichen dass eine Verbindung möglichst immer sauber geschlossen wird.

    3. Noch mal: ich habe hier nicht den aktuellsten Code gepostet. Daher sind die print-Anweisungen da oben noch falsch. Mir ist das klar, dass python2 keine Print-Funktion enthält; und man in python3 mehrere Ausgaben nicht mit + str()verbindet sondern jede gewünschte Ausgabe als Parameter übergibt....


    Ich verstehe euch ja, auch dass der Code nach den gültigen Regeln erstellt werden soll und dies, gerade in der Lernphase am besten "gleich mit" zu lernen ist. aaaber: Wir beschäftigen uns doch grad nicht mit der eigentlichen Problemstellung :denker:


    Nur eins noch: Warum sollen/dürfen Variablennamen nicht großgeschrieben werden?

    Leider lässt sich dein Code schwer lesen weil ständig Leerzeilen eingefügt sind.. Bitte bearbeite deinen Beitrag und beachte: HowTo: CODE / PHP Code im Forum posten

    Moin,

    ich geh bald echt am Stock! Ich verbringe im Moment beinahe mehr Zeit damit Code Chick und schön zu machen, als der Lösung meiner Problemstellungen näher zu kommen. Habe jetzt manuell alle unnötigen Leerzeilen -- die übrigens das Forum da rein interpretiert hat -- entfernt. Der code-block ist eine Kopie aus einem bereits von mir "richtig" geposteten code-block eines vorherigen Themas.


    Ich nutze seit gestern Abend definitiv Python3, habe den Quellcode aber aktuell nicht hier und gestern Nacht nicht mehr daran gedacht ein Update zu posten.

    Wie in einem vorherigen Thread schon erwähnt, die print()´s dienen derzeit nur zu Entwicklungszwecken bis die Daten in die SQL-Datenbank geschrieben werden.

    Sorry ich habe es gestern Abend nicht mehr geschafft den aktuellen Quellcode mit print("", "") zu posten, aktuell habe ich ihn bis heute Abend auch nicht vorliegen. Allerdings hat meiner Meinung nach print "" und print("", "") nix mit der eigentlichen Problemstellung zu tun, oder irre ich mich da?


    Der Code wird von mir regelmäßig, dank des Tipps vom Bootsmann :bravo2: durch http://pep8online.com geschickt und entsprechend der Fehlermeldungen von mir bearbeitet.

    Wie im folgenden Quellcode zu erkennen möchte ich mit meinem RPi3, als Modbusmaster, mehrere Slaves (Arduino Nano) abfragen bzw. deren Holding_Register auslesen. Dies klappt soweit auch ganz gut. Es gibt aber zwei Scenarien bei denen mir das jetzige Script mit einem Fehler abbricht. Aktuell ist das Script so eingestellt, dass statisch 10 Slaves abgefragt werden, zukünftig würde ich das Script so anpassen, dass die bei 4bit-Adresscodierung maximale Anzahl an Slaves abgefragt werden sollen, also max. 15 request´s.


    1. Die Anzahl der Slaves ist u.U. nicht immer gleich

    2. Das Klimadatenmesssystem soll schnellstmöglich an den Start gehen auch wenn noch nicht alle Slaves bauseitig installiert sind

    3. Es kann durchaus sein, dass ich noch einen Raum mehr messtechnisch erfassen möchte, dann soll aber das Script nicht dafür angefasst werden müssen


    Wie in einem vorherigen Thread schon erwähnt, die print()´s dienen derzeit nur zu Entwicklungszwecken bis die Daten in die SQL-Datenbank geschrieben werden. Sofern einer von X Slaves nicht erreichbar ist, schreibe ich dann 0-Werte in die DB oder lasse den Eintrag weg - das ist ein anderes Thema.


    :helpnew: Jetzt habe ich mich schon etwas mit Pymodbus und den mitgelieferten Modulen beschäftigt, kann aber für RTU irgendwie keine Möglichkeit finden Slaves, sozusagen, auf Existens oder Status=Online zu überprüfen. Hat dazu jemand von euch Erfahrenen einen Lösungsansatz? :helpnew:


    :danke_ATDE:


    Moin Linus,

    ich hab in meinem letzten Posting mal den geänderten Code dran gehängt. Bis auf, dass bei mir tatsächlich noch Python 2.7 ausgeführt wurde, ist dieser nach den vom Bootsmann angesprochenen Regularien, unter zu Hilfenahme der Codechecker-Website, von mir angepasst worden.


    Nach ausführen von python -V wurde mir dann heute Morgen gezeigt, dass systemseitig Version 2.7 als Standard verwendet wurde. Ich hätte da auch selbst drauf kommen können, dass man sich nicht auf den Aufruf hinter dem Shebang verlassen kann. Denn in Python3 wird dieses hier print "Hallo", "Welt"ja nicht mehr akzeptiert :wallbash:


    Nun hab ich also per update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 und update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2 die Standardeinstellungen angepasst und es wird folgendes ausgegeben:

    pi@bigben:~ $ python -V Python 3.4.2 pi@bigben:~ $

    Allerdings kann python jetzt auch nicht mehr das Modul pymodbus finden :wallbash:


    Python
    pi@bigben:~/Python $ python SlaveRequest.py
    Traceback (most recent call last):
      File "SlaveRequest.py", line 5, in <module>
        from pymodbus.client.sync import ModbusSerialClient as ModbusClient
    ImportError: No module named 'pymodbus'


    Ich geh bald am Stock, hätte nicht gedacht dass es so kompliziert oder umständlich sein kann python zum Laufen zu bringen :/


    Hier noch mal der aktuelle Quellcode von heute Morgen:



    Muss der import jetzt auf eine andere Verzeichnisstruktur zugreifen nachdem Python3.4 als Standard gesetzt wurde?


    Fragen über Fragen vom Python-Neuling :angel:

    Moin Bootsmann,

    danke für deine Hinweise :thumbup: Ich befinde mich derzeit in der Quick_and_dirty-Phase. Von daher ist das alles noch nicht aufgeräumt so lange es nicht zufriedenstellend funktioniert. Putzen kann ich doch dann immer noch oder? Den PEP8 online check lasse ich aber grad mal durchlaufen und bearbeite meinen Quelltext entsprechend :)


    - Bitte hilf mir da mal auf die Sprünge was du mit Modulebene meinst, ich bewege mich bei Python auf Neuland.

    - Ich habe jetzt tatsächlich gedacht, ich kann mir frei aussuchen für was welche Schleife verwendet wird, es geht doch darum das Ziel zu erreichen :/ Beispiel: Genauso kann ich statt einer Switch/Case das Ganze auch mit If-then abwickeln - das bleibt doch mir überlassen oder sehe ich das falsch?

    - Da dieses Script noch sehr überschaubar ist, wir sprechen derzeit über weniger als 130Zeilen Quelltext, werde ich Funktinonen erstellen wenn ich es für notwendig halte und wenn ich feststelle, dass ich ein und die gleiche Aufgabe an mehreren Stellen im Code zu erledigen habe. Nimm´s mir nicht übel, aber im Moment halte ich es z.B. für unnötig den Verbindungsaufbau in eine eigene Funktion zu stecken. Damit verschiebe ich eine Zeile Code nach unten um dann in der ursprünglichen Zeile die Funktion aufzurufen.


    Jetzt hab ich allerdings immer noch das Thema, dass mir Chic und poliert nicht bei meinem Problem hilft :(


    Edit:


    Ich hoffe, so ist der Quelltext in Ordnung, einzig mit dem Fehler "line too long" komme ich nicht klar. Ein Zeilenumbruch führt zu noch viel mehr Fehlern...



    Jetzt, wie gesagt nur noch das Thema mit dem Abbruch des Scrip´s wenn Slave nicht erreichbar abstellen und dann bin ich glücklich :)

    Verwendest du zur Ausführung Python 2 oder 3?

    Moin Linus,

    ich verwende derzeit Python 3.4.


    2. Bitte verwende doch, um dir und allen beteiligten Ärger zu ersparen konsistent 4 Leerzeichen zur Einrückung. Tabs verschluckt das Forum, und so kann ich mit dem Code nicht arbeiten.

    Okay, das habe ich jetzt mal beherzigt, anbei hänge ich den Quellcode noch mal dran. Evtl. kannst du mir ja dabei behilflich sein, dass das Skript nicht immer gleich stoppt wenn ein Slave nicht erreichbar ist, sondern einfach weiter macht :)


    Erstellt habe ich den Quellcode mit Geany 1.31 unter Win7 Ultimate und dann per WinSCP auf das Verzeichnis des Raspi´s geschoben.


    Danke schon mal :)

    Quote from &quot;linusg&quot; pid='301635' dateline='1506684242'


    Was für ein Fehler ist es denn? Wird eine Exception geworfen? Wenn ja, bitte einmal den kompletten Traceback bitte, das sollte man dann abfangen können...


    Hi,


    also, die Ausgabe habe ich mal angehängt. Zwei Slaves befinden sich innerhalb des Modbus, wenn es darum geht die diritte ID anzufragen kommt die Fehlermeldung, die es gilt abzufangen ohne dass das Script in der Shell abbricht:



    Der entsprechende Code dazu sieht wie folgt aus:



    Wie gesagt, die ganzen print´s sind im Moment nur zu Entwicklungszwecken bis die Daten in die MySQL geschrieben werden.
    Danke schon mal :)

    Hi linus, danke dir für den Tipp :danke_ATDE:


    Arbeitest du öfter mit dem pymodbus? Evtl. könntest du mir noch eine weitere Frage beantworten:


    Ich benötige einen Lösungsansatz für die Überprüfung wie viele Slaves sich im Bus befinden, also ansprechbar sind, ohne dass dabei das Script mit einem Fehler abbricht. Bisher frage ich, sozusagen im Testmodus, eine feste Anzahl an Slaves ab und lese die holding_register:



    Die ganze Printgeschichte wird entfallen wenn die Werte dann in die SQL-Datenbank geschrieben werden. Bisher läuft mir Slave[runSlaves] = client.read_holding_registers(0000,4,unit=runSlaves) in einen Fehler den ich nicht abfangen kann wenn ein X-ter Slave nicht erreichbar ist. Hast du da eine Idee?