Temperaur Dashboard aus Technoline LaCrosse 868 MHz Sensorwerten

  • Ich habe den Funktionsaufruf in der `main` definiert, wieso machst du dass dann jetzt nicht auch?

    Ist dir denn der Umgang mit Funktionen bekannt?

    Die drei Code-Zeilen in die Funktion main einzubauen, war auch meine Idee. Das hat aber leider auch nicht funktioniert.
    Der Umgang mit Funktionen in Python ist mir leider eher nicht bekannt. Ich weiß, wie man sie aufruft und wie man Werte "returnt" aber ich sehe eben, dass nicht alles so klappt, wie ich es erwarten würde.

  • Temperaur Dashboard aus Technoline LaCrosse 868 MHz Sensorwerten? Schau mal ob du hier fündig wirst!

  • Na dann gibt es jetzt halt den ganzen Code des cli_tool.py (wie es aktuell zum Fehler führt, bzw. wo ich gern die Ideen von @Dennis98 einbauen würde):

    Edited once, last by Mic2022 (January 30, 2024 at 10:21 PM).

  • Die Zeilen gehören in die `main`-Funktion und gleich weit eingerückt wie die anderen Zeilen auch.

    Aber in dem gezeigten Code sind auch noch weitere Namen nicht definiert, zum Beispiel in `scan_txt` das `txt_file`. Also selbst wenn du die drei Zeilen richtig in die `main` schreibst ist der Code nicht lauffähig.

    Ich würde dir empfehlen als erstes das Python-Tutorial durch zu arbeiten. Die Grundlagen müssen schon etwas sitzen, wenn man etwas umfangreicheren Code überarbeiten will. Ich weis nicht ob es zielführend ist, wenn das jetzt jemand macht und das Ergebnis postet. Wenn du das willst und jemand Langeweile hat, bekommst du das vielleicht, aber für den eigenen Lernprozess ist das vermutlich nur bedingt hilfreich.

    Es gibt ein offizielles Tutorial:

    The Python Tutorial
    Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented…
    docs.python.org

    Aber es kommt noch besser, unser noisefloor hat sich die Mühe gemacht, das Tutorial ins deutsche zu übersetzen:thumbup:

    PyTuDe - Python Tutorial auf Deutsch


    Grüße

    Dennis

    🎧 Strahlend soll die Zukunft sein, gut wir werden seh'n, ob wir wie ein Strahlemann lächelnd untergeh'n.  🎧

  • Hallo Dennis89,

    dann ist Python eine magische Programmiersprache, denn mein "Quick & Dirty" Code läuft seit zwei Wochen problemlos dauerhaft durch. Die von dir benannten Variablen sind definiert:

    txt_file --> Zeile 63

    scan_txt --> Zeile 153 (ist an sich keine Varible, sondern eine Funktion)

    Ich habe mir gestern Abend noch einmal ein andere Tutorial angesehen. Die Funktionsaufrufe für read_config_file(file_config) usw. müssen in der Funktion "main" durchgeführt werden. Nur, wenn ich sie da einbaue, kommen die Werte der unter "return" der Funktion read_config_file(file_config) festgelegten Variablen nicht in der Funktion "scan_db()" an. Daran scheitere ich.

    Danke und Grüße,
    Mic.

  • Hallo,


    eventuell hast du bei deinem Edit noch etwas am Code geändert? Denn den ich kopiert hatte, hatte Fehler drin, aber jetzt passt es.

    Es ist schön das dein Programm problemlos läuft. Mit meinen Anmerkungen wollte ich dir einen Eindruck davon verschaffen, wie du das Programm aufbauen könntest, denn ein Problem hast du mit deinem Code: Er ist dir zu kompliziert um einen weiteren Sensor einzubauen.

    `return` gibt etwas an die Funktion zurück, in der ein Funktionsaufruf statt fand. Schau dir das verlinkte Tutorial an, das ist von den Python-Entwicklern und nicht von "irgendjemand".


    Grüße

    Dennis

    🎧 Strahlend soll die Zukunft sein, gut wir werden seh'n, ob wir wie ein Strahlemann lächelnd untergeh'n.  🎧

  • Hallo zusammen,

    also ich finde nach wie vor, wir SCHWEIFEN AB, da du meine Frage sicher schon längst gelesen hast. 😉Aber ich bin ja kein Unmensch. Daher tippe ich alles nochmal neu, ganz ohne Kopierpaste.

    Ich hatte festgestellt, dass nach Dennis‘ beschreibung Python eine magische Programmiersprache ist, denn mein eher etwas „quick and dirty“ gehacktes Skript läuft sein zwei Wochen echt gut durch. Dennoch bin ich neugierig und möchte gern eure Tipps umsetzen. Da kann ich noch was dazu lernen.

    Die beiden angesprochenen Variablen sind im o.g. Code definiert… vielleicht etwas versteckt, wobei scan_txt keine Variable ist, sondern eine Funktion zu einem Argument für den Kommandozeilenaufruf für pyLacrosse (Aufruf: pylacrosse -d /dev/ttyUSB0 scantxt).

    Die Variable txt_file wird in Zeile 63 definiert. Die Funktion scan_txt wird in Zeile 153 in #42 definiert.

    Statt meines „quick and dirty“ codes, möchte ich gern die beiden Funktionen open_config_file() und read_config_file() einbauen. Die darin definierten Variablen sollen dann u.A. in der Funktion scan_callback_db() verwendet werden. Dafür wiederum habe ich die Zeile org, bucket, url, token, txt_file = read_config_file(open_config_file()) in die Funktion main() eingebaut (was im gezeigten Code in #42 noch nicht zu sehen ist). Mein Problem ist, dass die Funktion scan_callback_db() dennoch mit dem Fehler, dass die Variable bucket nicht definiert ist, abschmiert. Also vermute ich, dass die besagten Variablen ihren Weg nicht von main() nach scan_callback_db() finden.

    Ich vermute, ich habe nur einen kleinen Denkfehler, komme aber leider dennoch nicht weiter und hoffe auf hilfreiche (von der Formatierung dieses Beitrags unabhängige) Tipps. 😊

    Vielen Dank dafür. ❤️

    Grüße, Mic.

  • Hi Dennis89 ,

    ah perfekt. Vielen Dank! Das hatte ich bei all der Diskussion über die Schriftfarbe überlesen. Wie du es beschreibst, soweit war ich auch gekommen. Wenn ich eine Variablenabfrage (z.B. via org, bucket, url, token, txt_file = read_config_file(open_config_file()) direkt in die Funktion scandb() einbaue, dann funktioniert es (teilweise). Das hat aber den Nachteil, dass diese Zeile bei jeder Schleife der Funktion wieder und wieder und wieder aufgerufen wird. Mir wäre es aber lieber, wenn die benannten Variablen bei Programmstart einmalig beschrieben werden und dann während Programmlauf nur noch verwendet werden. Daher dachte ich, ich kann’s in main() einbauen und dadurch für alle Funktionen (scan_db(), scan_txt(), …) verfügbar machen. Das klappt aber leider nicht.

    Hintergrund: Dein Code in Gänze hat den repetierenden Programmablauf schon direkt in main() drin, ist damit aber auch darauf spezialisiert nur die Funktion „Scan in Datenbank“ zu erfüllen. Ich benötige aber den vollen Funktionsumfang von pyLacrosse und möchte daher die Grundstruktur der cli_tool.py beibehalten. Allerdings finde ich deine Ansätze in der Tat hübscher als meinen „Quick and Dirty“-Code.

    Vielleicht verstehst du nun, was ich meine. 😊

    Grüße,
    Mic.

  • Du kannst ja das was zurück kommt nehmen und einer anderen Funktion beim Aufruf übergeben, wenn die Funktion das benötigt.


    Grundsätzlich ist das so, das in der main-Funktion der Programmablauf gesteuert wird. Ich kann es nur noch mal betonen, du musst mit Funktionen arbeiten können. Das ist entscheidend wenn du so etwas machen willst. Daher die Links zu den Tutorials. Es wäre sinnvoll erst kleine Teilprobleme zu lösen, bis man alles zu einem großen Projekt zusammen fasst. Ich würde mich auch nicht zu sehr auf den vorhandenen Code fokussieren. Wichtiger ist deine gewünschte Funktion und die baust du dann in kleinen Teilstücken zusammen. Es wird nicht wartbar/erweiterbar und evtl auch nicht sonderlich brauchbar, wenn du dich mit den Grundlagen von Python/Programmierung beschäftigst.

    Das soll jetzt auch nicht doof oder besserwisserisch klingen, aber diesen Rat habe ich am Anfang auch bekommen und es war so genau der richtige Weg.


    Grüße

    Dennis

    🎧 Strahlend soll die Zukunft sein, gut wir werden seh'n, ob wir wie ein Strahlemann lächelnd untergeh'n.  🎧

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!