Fehlermeldung bitte um Hilfe

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • [font="Open Sans, sans-serif"]Hallo,[/font]
    [font="Open Sans, sans-serif"]Ich versuche für meinen RPI eine Script unter Python zu schreiben. [/font]
    [font="Open Sans, sans-serif"]Erste Problem nach Enter kann ich in der vorherigen Zeile nichts mehr ändern.[/font]
    [font="Open Sans, sans-serif"]Wie kann ich aber nach Fehlermeldung eine Änderung vornehmen.[/font]

    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]GPIO.setup(Ampel [rot], GPIO.OUT, initial=False[/font][/font]

    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]Hier fehlt am Ende eine Klammer[/font]
    [font="Open Sans, sans-serif"]Wie kann die nachträglich eingefügt werden.[/font][/font][/font]

    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]import RPi.GPIO as GPIO
    import time[/font]
    [/font][/font][/font]
    [font="Open Sans, sans-serif"]GPIO.setmode(GPIO.BCM)[/font]
    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]rot = 0; gelb = 1; gruen = 2
    Ampel=[4,18,23]
    GPIO.setup(Ampel [rot], GPIO.OUT, initial=False)
    Traceback (most recent call last):
    File "", line 1, in
    GPIO.setup(Ampel [rot], GPIO.OUT, initial=False)
    RuntimeError: No access to /dev/mem. Try running as root!
    GPIO.setup(Ampel[rot], GPIO.OUT, initial=False)
    Traceback (most recent call last):
    File "", line 1, in
    GPIO.setup(Ampel[rot], GPIO.OUT, initial=False)
    RuntimeError: No access to /dev/mem. Try running as root![/font][/font][/font][/font]

    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]Was ist das für ein Fehler[/font]
    [/font][/font][/font][/font]
    [font="Open Sans, sans-serif"]Ich habe alles genau wie vorgegeben abgeschrieben. Komme leider nicht weiter.[/font]

    [font="Open Sans, sans-serif"]Wer kann helfen.[/font]
    [font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"][font="Open Sans, sans-serif"]Danke Michael[/font][/font][/font][/font][/font]

  • Du startest das Script mit sudo

    Code
    sudo python scriptname.py


    Automatisch zusammengefügt:
    Root ist sudo kann ich nicht so stehen lassen.
    root ist das äquivalent zu Admin in Windows, sudo ist ein Befehl der den nächsten Befehl mit root-Rechten ausführt.

    Einmal editiert, zuletzt von Horroreyes (8. September 2015 um 00:20)

  • Moin,
    Ich war gestern so genervt von dieser tipperei.
    Jetzt nochmal:
    - Ich starte den PI über Remout Desktop Winz
    - Auf dem Screen ist ein Verzeichnis Python2
    - Bei diesem habe ich mit Rechtsklick den Text Editor geöffnet und in denZeilen:

    NAME=idle_GPIOB.Desktop
    EXES=sudo /usr/bin/idle

    eingetragen und die Datei dann unter <idle_GPIOB.Desktop > gespeichert.
    Laut Buch Franzis Lernpaket sollte jetzt der Interpreter immer mit root Rechten geöffnet werden. Ist das so OK?

    Wenn ich jetzt die Python Shell öffne und ich gebe die Befehle ein
    >>> GPIO.setmode(GPIO.BCM ---hier habe ich z.B. hinter BCM die Klammer vergessen
    >>>GPIO.setupxxxxxxx ---und bin jetzt schon in der nächsten Zeile, gelingt es mir nicht die Klammer nachträglich einzufügen bzw. ein Zeichen zu löschen oder zu ändern

    Das So weit.
    Kannst Du mir bitte helfen.
    Danke Michael

  • Hallo ,
    Habe jetzt das Programm in Notepad geschrieben und mit FileZilla auf den PI geschoben
    Bis auf ein paar Fehler jeweils Einzug Zeilenbeginn ( Dieser wird unter Python automatisch festgelegt)
    konnte ich die Datei tatsächlich öffnen. Leider funktioniert die Schaltung nicht.
    Es kommt folgende Fehlermeldung:

    Ampel.py:8: RuntimeWarning: This channel is already in use, continuing anyway.
    Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(Ampel[rot], GPIO.OUT, initial=False)
    Ampel.py:9: RuntimeWarning: This channel is already in use, continuing anyway.
    Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(Ampel[gelb], GPIO.OUT, initial=False)
    Ampel.py:10: RuntimeWarning: This channel is already in use, continuing anyway.
    Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(Ampel[gruen], GPIO.OUT, initial=True)
    Strg+C beendet das Programm

    Die Zeilen 8,9,10 sind folgende:

    GPIO.setup(Ampel[rot], GPIO.OUT, initial=False)
    GPIO.setup(Ampel[gelb], GPIO.OUT, initial=False)
    GPIO.setup(Ampel[gruen], GPIO.OUT, initial=True)

    Kann mir da jemand helfen?
    Ich versuche aus Franzis Lernpaket die Verkehrsampel zu bauen.
    Gruß Michael

  • Hallo Michael,

    das, was Du als Fehlermeldungen bezeichnest, sind lediglich Warnungen. In diesem Fall geht es darum, dass Du die einzelnen GPIO-Ports "geöffnet" hast - aber nicht "geschlossen" hast. Dafür gibt es in Python aber auch einen eigenen Befehl: [font="Courier New"]GPIO.setwarnings(False)[/font]

    Dein Programm läuft unabhängig davon weiter und kann die GPIO-Ports nutzen.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (8. September 2015 um 20:04)


  • Hallo Michael,

    das, was Du als Fehlermeldungen bezeichnest, sind lediglich Warnungen. In diesem Fall geht es darum, dass Du die einzelnen GPIO-Ports "geöffnet" hast - aber nicht "geschlossen" hast. Dafür gibt es in Python aber auch einen eigenen Befehl: [font="Courier New"]GPIO.setwarnings(False)[/font]

    Dein Programm läuft unabhängig davon weiter und kann die GPIO-Ports nutzen.

    Beste Grüße

    Andreas

    Hallo Andreas,
    Danke für Deine Nachricht. Habe sie eben erst gelesen.
    Mir ist nicht bekannt, wann ich diese Ports geöffnet haben soll.
    Aber-Jetzt wird die Meldung nicht mehr angezeigt. Die Ampel funktionert aber nicht.


    Das ist der komplette Code. Es startet die grüne LED und weiter geschieht nichts.
    Mit Strg+C wird beendet-auch ohne Fehlermeldung.
    Die Schaltung ist verstanden und mehrfach überprüft.
    Wie kann ich die Ports wieder in den Urzustand versetzen.
    Danke Michael
    Automatisch zusammengefügt:


    Hallo Michael,

    das, was Du als Fehlermeldungen bezeichnest, sind lediglich Warnungen. In diesem Fall geht es darum, dass Du die einzelnen GPIO-Ports "geöffnet" hast - aber nicht "geschlossen" hast. Dafür gibt es in Python aber auch einen eigenen Befehl: [font="Courier New"]GPIO.setwarnings(False)[/font]

    Dein Programm läuft unabhängig davon weiter und kann die GPIO-Ports nutzen.

    Beste Grüße

    Andreas

    Hallo Andreas,
    Danke für Deine Nachricht. Habe sie eben erst gelesen.
    Mir ist nicht bekannt, wann ich diese Ports geöffnet haben soll.
    Aber-Jetzt wird die Meldung nicht mehr angezeigt. Die Ampel funktionert aber nicht.


    Das ist der komplette Code. Es startet die grüne LED und weiter geschieht nichts.
    Mit Strg+C wird beendet-auch ohne Fehlermeldung.
    Die Schaltung ist verstanden und mehrfach überprüft.
    Wie kann ich die Ports wieder in den Urzustand versetzen.
    Danke Michael

    Einmal editiert, zuletzt von Michael50 (10. September 2015 um 10:00)

  • Hallo Michael,

    hm, der Python-Code ist so jedenfalls nicht nachvollziehbar. Die sehr wichtigen Einrückungen sind in dem Code nicht dargestellt. Somit ist nicht erkennbar, wann ein try oder while abgeschlossen wird.

    Unabhängig davon, dass ich nicht in Python programmiere, müsste Dein Programm so aussehen:


    Mir fallen jetzt noch weitere Fehlermöglichkeiten ein:
    1. Du hast die LEDs an die falschen GPIO-Pins angeschlossen.
    2. Der Vorwiderstand ist viel zu hoch.
    3. LEDs verpolt angeschlossen.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (10. September 2015 um 10:29)

  • [font="Arial"]Hallo Andreas,[/font]
    Ich habe gerade nochmal die betroffenen GPIO Ports mit
    [font="Arial"]gpio -g read 4 usw.[/font]
    [font="Arial"]geprüft. Ergebnis ist das im ausgeschalteten Zustand [/font]
    [font="Arial"]GPIO 4=0[/font]
    [font="Arial"]GPIO 18=0[/font]
    [font="Arial"]GPIO 23=0[/font]
    [font="Arial"]Im eingeschalteten Zustand aber [/font]
    [font="Arial"][font="Arial"]GPIO 4=0[/font][/font]
    [font="Arial"]GPIO 18=0[/font]
    [font="Arial"][font="Arial"]GPIO 23=1[/font][/font]
    [font="Arial"][font="Arial"]Das ist doch alles OK.[/font][/font]
    [font="Arial"][font="Arial"]Wie Du siehst befasse ich mich schon sehr mit der Materie, aber jetzt :@ [/font][/font]
    [font="Arial"][font="Arial"]Gruß Michael[/font][/font]



    Automatisch zusammengefügt:

    Hallo Andreas,
    Danke für Deine Hilfe.undefined
    Die Ampel schaltet wie gewünscht.
    Mein Fehler war die Tab Einstellung.
    Leider hat das Python nicht als Fehler gemeldet.
    Ich habe diese nach Deiner Vorgabe verändert.
    Damit ist der Punkt abgehakt und ich kann die nächste Schaltung versuchen.
    Nochmals DANKE!
    Gruß Michael

    Einmal editiert, zuletzt von Michael50 (10. September 2015 um 11:19)

  • Gewöhne dir bitte mal ab Beiträge die genau da drüber stehen vollständig zu Quoten. Und du hast das selbe 2x gepostet - bitte bearbeite deinen Beitrag (unten rechts) und lösche den doppelpost.
    Danke.

    Desweiteren steht in der Meldung exakt was passiert: continuing anyway.
    Wäre das ein fatales Problem würde das Programm/Script mit Sicherheit nicht weiterlaufen.

    Du "öffnest" die Ports durchs setup. Lass aber auch mal "initial=False" weg.

    Ich rate generell davon ab was Andreas geraten hat: nicht GPIO.setwarnings(False) verwenden!
    Es ist besser dafür zu sorgen dass das Programm/Script die GPIOs nach beenden auf Werkszustand zurück setzt. Das ist nicht nur eine bessere Programmier-Weise sondern stellt auch sicher das keine GPIO's mehr aktiv sind nachdem das Programm, welche diese benutzte, überhaupt noch aktiv ist.
    Oder macht ihr euer Auto auch immer aus indem ihr es Absauft, anstatt den dafür vorgesehenen Zündschlüssel zu verwenden? :-/

    Korrekte Handhabung wäre die Verwendung von GPIO.cleanup() .. Was du auch drin hast, allerdings wird im nächsten Absatz der Grund liegen wieso dies nicht funktioniert.

    Wie Andreas schon schrieb fehlen in deinem gezeigten Code die Einrückungen: Abstand von links nach rechts. Das ist für Python extrem wichtig da es dadurch erkennt welche Zeile zu welchem Block/Abschnitt gehört. Generell kannst du dir merken das nach einem Doppelpunkt eine Einrückung stattfinden muss und wenn der dazu gehörige Teil fertig ist nimmt man diese Einrückung wieder weg. Üblich sind entweder 2 oder 4 oder 8 Leerzeichen die man als Einrückung verwendet. Standard sind imho 4 Leerzeichen. Man kann aber auch TABs verwenden, nur darf man diese nicht mischen - entweder Leerzeichen oder Tabs.

    Noch was zur 'print' Zeile: wenn du python2 verwendest dann ist ' print("bla") ' falsch. Bei python2 ist print keine Funktion sondern ein Statement. Durch diese falsche Handhabung wird eine sog. tuple gebildet. Wenn du also python2 verwendest dann muss es stattdessen so aussehen: print "bla"
    Wenn du python3 verwendest ist ' print("bla") ' aber korrekt. (in python3 hat sich einiges geändert weshalb es nicht vollständig abwärtskompatibel is)

  • Hallo,
    Danke für Deine Nachricht.
    Die Kritik versuche ich zu beherzigen. Ich bitte um Entschuldigung.
    Wie schon mitgeteilt funktioniert das Programm jetzt.
    Werden die GPIOs automatisch wenn ich Strg+C (in diesem Fall) betätige zurück gesetzt?
    Ich benutze python 2.
    Was ich nicht begreife ist, wenn die Eingabe in den Interpreter erfolgt ist und ich stelle einen Fehler fest,
    bin aber schon eine Zeile weiter wie kann ich den Fehler in der vorherigen Zeile korrigieren.
    Mir gelingt das nicht.
    Deshalb auch der Umweg über Notepad.
    Gruß Michael

  • Hallo Michael,

    Strg-C unterbricht das aktuelle Programm / Skript. GPIOs und deren Zustände / Funktionalitäten werden davon nicht beeinflusst.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • ...Deshalb sollte man "try:" und "except:" verwenden um dann ein KeyboardInterrupt (strg+c) zu erkennen und dann das Script sauber zu beenden (gpio.cleanup())

    Siehe dazu auch FAQ --> Nützliche Links / Linksammlung --> Interrupt sowie Script sauber/sanft beenden

  • Hallo,
    Danke für Eure Nachrichten.
    Langsam aber Sicher geht es weiter und die Schreiberei in den Interpreter verbessert sich auch.
    Leider ist mir immer noch nicht klar wann und wie weit eingerückt wird oder werden muss.
    Im Terminal wird ja immer der Fehler mit einer Markierung angezeigt. Auch diese ist für mich oft unklar.
    wenn ich nicht weiter komme nehme ich mir dann immer ein funktionierendes Programm und sehe nach.
    Das kann aber nicht die Lösung sein. Mich interessieren hier die Grundlagen.
    Gruß Michael

  • Hallo Michael,

    wenn Du an den GRundlagen interessiert bist, soltest Du Dich mit einem guten Tutorial auseinandersetzen.

    Bei Python ist es wichtig, dass Du entweder mit der TAB-Taste ODER der Leertaste in gleichen Abständen (meistens deren viere) einrückst.

    Immer, wenn es eine Verschachtelungsebene tiefer geht, drückst Du die TAB-Taste oder entsprechende Leertaste. Und wenn Du der Ansicht bist, dass diese Verschachtelungstiefe beendet ist, rückst Du die nächste Zeile entsprechend weniger ein.

    Eine syntaktische Schwäche von Python liegt meiner Meinung darin, dass es keinen Befehl für das Ende einer Schleife / Verschachtelungsebene gibt. Dies war bei den Vorgängersprachen, aus denen sich Python entwickelt hat, noch der Fall. Dies hat auch das Erlernen der Python-Vorgänger deutlich vereinfacht.

    Wenn mehr als eine Einrückung weniger vorhanden ist, deutet Python dies als Abschluss mehrere Verschachtelungsebenen. Dies macht das Verständnis meiner Meinung nach um einiges schwieriger.

    Wie gesagt, arbeite ein gutes Tutorial durch - dann wird das...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,
    Danke für Deine Rat.
    Da ich ja nun nicht mehr der Jüngste bin und nie etwas mit Programmierung zu tun hatte,
    ist des begreifen doch ganz schön anstrengend. Dazu kommt, dass ich zu denen gehöre,
    die " Neues " praktisch erklärt besser finden. Leider gibt es hier und in meiner Umgebung keine Hilfe.
    Deshalb bin ich auf das Internet angewiesen.
    Was für mich nicht sehr hilfreich ist, sind Unterstützungen die da nur kurze Angaben beinhalten,
    die jeder Involvierte versteht, ein Anfänger aber vor einem Rätsel steht.
    Kannst Du ein Tutorial empfehlen?
    Gruß Michael

Jetzt mitmachen!

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