Posts by wannabeatbox

    Quote

    ..jedesmal wenn ich dieses $val = trim(@shell_exec()) Zeug lese krieg ich nen Würgereiz... und dann auch noch absolut sinnlos chmod für /var/www/ ändern Icon_wallbash bitte solch Anleitungen ganz schnell wieder vergessen! Lies bitte stattdessen:


    FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO


    Haha okay! Danke für den link, hatte ich auch schon etwas durchgearbeitet...werd mich dann wohl daran halten!


    Eigentlich frage ich mich nur, warum die php Dateien nicht funktionieren. Laufen die html auch über den Benutzer www-data?
    Der Benutzer www-data müsste ja dann bereits der Besitzer von var/www/html sein oder?
    Wenn ich also eine php- Datei mit nano erzeuge und ich sie in var/www/hmtl speichere, müsste sie laufen?


    hyle: php5 bereits installiert.Mein Plan ist auf dem Raspberry "var/www/html/buttons.php" zu erzeugen. Diese "buttons.php" will ich dann in meinem lokalen Netzwerk auf dem laptop, smartphone usw. anzeigen lassen.
    Die zwei Dateien waren nur ein Versuch, ob es was am Ergebnis ändert. Der Inhalt der Dateien ist identisch.

    Greife derzeit via Putty auf meinen Raspberry zu. Habe dazu einfach "sudo nano /var/www/html/buttons.php" erstellt und das php Skript runtergeschrieben. (nano allein hätte wohl auch gereicht?)
    Die php habe ich also in /var/www/html/ gespeichert, genau so wie meine anderen html- Dateien. Die html funktionieren ja, warum dann php nicht?


    Grüße

    Guten Abend zusammen!


    Nachdem ich mich etwas mit html und css beschäftigt habe, wollte ich nun einen Schritt weitergehen und php mir zur Brust nehmen.


    Habe daraufhin einfach mal ein Beispiel aus dem Internet aufgegriffen, um es zu testen, ob es überhaupt funktioniert. Meine Datei habe ich buttons.php genannt. "Abgekupfert" habe ich in etwa die Testseite vonhttp://www.raspberrypi-tutoria…ace-mit-php-schalten.html.


    Leider werden nur folgende Fehlermeldung angezeigt(habe es auch mit 2 verschiedenen Ordnern probiert):


    buttons.php im Ordner var/www/: "404- Not Found"
    buttons.php im Ordner var/www/html : "403- Forbidden"


    .html funktionieren alle einwandfrei!Apache2 und html5 ist installiert.


    Was mache ich falsch? :helpnew:
    Danke für die Antworten!


    Bitte benutz Code Tags. Dein close ist wirkungslos weil du keine Klammern dahinter hast. Vor allem aber ist es überflüssig weit Sinn & Zweck des with statements das implizite öffnen & schliessen einer Datei beinhaltet.


    Zu deinem Problem: statt das Rad neu zu erfinden, benutze das Python logging modul. Ist gut dokumentiert & kennt unter anderem einen RollingFileAppender der das schon kann & sogar nach einigen Tagen hinter sich aufräumt.


    Sorry wollte ich machen, aber irgendwie auf Absenden gekommen bevor ich fertig war mit meinem Post :stumm:
    Hab ihn nachher bearbeitet...


    Okay vielen Dank für den Rat, werd ich mal etwas googlen müssen :denker:

    Hallo zusammen!
    ich würde gerne eine txt Datei erzeugen, bei dem im Dateinamen immer das aktuelle Datum hinzugefügt wird, also z.B. ausgabe_22Jan2017.txt


    Bis jetzt habe ich es immer so gemacht:


    [code=php]
    with open = open("var/www/ausgabe" + time.strftime("%x",localtime()) + ".txt.", "a") as f
    f.write ("text_der_in_Datei_steht" + '\n')[/php]


    funktioniert leider nicht so...
    wenn ich das mit dem Datum weglasse, funktionierts


    [code=php]
    with open = open("var/www/ausgabe.txt.", "a") as f
    f.write ("text_der_in_Datei_steht" + '\n')[/php]

    Alles Klar Meigrafd. vielen Dank für die umfassende Antwort (brauchst aber im anderen Thema gleich so abgehen^^)


    Habe nun meinen Onkel gefragt, Elektronikexperte. Der Fehler ist ein sehr leichter wie dummer Fehler meinerseits in der Schaltung! Ich habe den GND von Raspberry ganz einfach nicht mit dem Minuspol meiner Heizung verbunden! Fehler gelöst, alle von euch und von mir geschriebenen Programme laufen!


    Vielen Dank für eure mithilfe!


    greets

    Hallo zusammen,


    stecke zur Zeit in einem Problem bei der Heizungsüberwachung fest. Um einen Fehler auszuschließen will ich mir ein kleines Versuchsprogramm schreiben.(Ich weiss, suboptimal, da das Raspi ziemliche Arbeit leisten muss) Bis jetzt habe ich das hier:


    [code=php]# -*- coding: utf-8 -*-
    import time
    from RPi import GPIO


    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(13, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)


    Start = 0
    Counter = 0
    Dauer = 0


    try:
    while True:
    time.sleep(1)
    if GPIO.input(13) == GPIO.HIGH:
    Start = time.time()
    Counter = Counter + 1
    print "Counter" + str(Counter)
    elif GPIO.input(13) == GPIO.LOW:
    Ende = time.time()
    print "Ende" + time.asctime(time.localtime())
    Dauer = (Ende - Start)/60
    print "Dauer: " + str(Dauer)
    else:
    print"Ein Fehler trat auf"
    except:
    print"Messung beendet"
    GPIO.cleanup()[/php]


    Ich unterscheide also, ob GPIO 13 High oder low ist. Die While Schleife wird jede Sekunde ausgeführt und GPIO 13 geprüft.
    Mein Problem: Ich hätte gerne, dass sich das Programm bei GPIO=HIGH so lange in der if-Schleife aufhält, bis GPIO13= Low ist und dann erst mit der elif Schleife fortzufahren.
    Wie kann ich das realisieren? Irgendwas mit queue(wobei ich das noch nicht so kapier). oder eine Unterschleife in der if-Schleife?
    Oder beides zusammen, also unter die if-Schleife eine weitere if-Schleife mit queue?



    Dankbar um jeden Tipp!

    Hallo Andreas!Vielen Dank für den Tipp


    Habe einen Pulldown-Widerstand verwendet, da ich für das GPIO.input eine Spannung von 3,3V beim Einschalten der Heizung erwarte:

    Code
    GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)


    das meintest du oder?


    Kann es vielleicht sein, dass der Trafo (230V AC zu 5V DC) das Signal nicht ausreichend glättet und ich eine (Rest-)Oberwelligkeit, also Brummspannung, erhalte?
    Oberwelligkeit = minimaler Flankenwechsel mit 50 Herz, mein interrupt wird jedesmal ausgelöst.
    Würde die vielen Signale alle paar Sekunden erklären, aber nicht warum nur Ende-Signale vorhanden sind- bei Flankenwechsel sollte das Programm ja prüfen ob die input- Spannung <0,8V oder >0,8V ist. Bei Heizung ein wäre die Spannung immer größer 0,8V, es sollte also ein Start- Signal resultieren!! Tut es aber nicht!


    zum Nachlesen meines Gedankengangs:Siehe Unterpunkt "Glättung"
    https://de.wikipedia.org/wiki/Gleichrichter#Gl.C3.A4ttung


    greets

    Okay vielen Dank für eure Hilfe schon mal. Leider funktioniert die Schaltung auch mit dem optimierte Programm von meigrafd nicht so ganz.
    Scheinbar ist die Spannungseingabe etwas holprig:
    Angeschlossen an der Heizung gibt mir das Terminal ausschließlich Ende- Signale, also GPIO.LOW, aus. Und davon sehr viele im Sekundentakt. Ein Start-Signal sucht man vergebens.
    Allerdings ist mir aufgefallen, es reicht schon ein leichtes Bewegen oder Rütteln an den Komponenten und es wird das selbe falsche Signal ausgesendet. Liegt ein Kontaktierungsproblem vor?!


    An der Software sollte es ja nicht liegen:
    Habe einen handelsüblichen Schalter am 3,3V GPIO angesteckt und damit den input verbunden. Wenn ich den Schalter ordnungsgemäß betätige, erhalte ich bei allen verwendeten Programmen ein korrektes Ergebnis (zuerst Start, dann Ende und dann die Dauer). Passt also!



    Zum Programm selbst habe ich als Programmier-Neuling noch Fragen:




    [code=php]def interrupt_Event(q, channel):


    q.put( (channel, GPIO.input(channel)) )[/php]
    Wie ist nun in Worten das interrupt-Ereignis definiert? Was heißt das q.put?



    [code=php]if __name__ == "__main__":
    main()


    [/php]
    Zweiteres: die main() ist für Übersichtszwecke und dass man es irgendwie später nochmal verwenden könnte? Braucht man nicht zwingend oder? Aber was besagen diese 2 Zeilen am Schluss des Skripts? Was wird dadurch gesteuert?
    Vielleicht wären ein paar Kommentare im Programm ganz hilfreich...


    greets

    Vielen Dank meigrafd!


    Ich denke ich verstehe langsam, was ihr meint!
    Vielen Dank für das Programm, das kann ich ja fast schon so benutzen!



    Mit der Definition von Start hast du recht, weiss nicht wo ich da wieder geschaut hab, ich glaub ich halluziniere schon wieder :D


    Werd mich wohl noch etwas mit der "queue" und "partial" auseinandersetzen müssen, ist mir leider bis jetzt noch nicht untergekommen!


    Ich bin einverstanden, dass meine interrupt Schleife nicht optimal ist.
    Aber was ich nicht ganz verstehe: Eigentlich müsste das Programm funktionieren (was es auch tut, wenn ich es mit einem GPIO mit 3.3V versuche). Sobald es aber in die Praxis geht, sprich zur Heizung, erkennt er die if- schleife (GPIO.HIGH) im Callback nicht! Er schreibt ja nur alle paar Sekunden ein Ende (=GPIO.LOW) rein.


    greets

    Vielen Dank!


    Quote

    - ein Interrupt ist keine Schleife. sondern ein Ereignis. Und während ein Interrupt aktiv ist, kann kein weiterer erfolgen. Daraus folgt, das man den Interrupt so *kurz* wie möglich macht! Denn sonst verlierst du Ereignisse. Das ist bei deinen noch sehr niederfrequenten Ereignissen verschmerzbar, fällt dir aber dann beim nächsten Projekt auf die Füsse. Darum sollte dein Interrupt Callback nur Ereignisse in eine Queue stecken, und deine Hauptschleife arbeitet die dann ab. Finden sich hier viele Beispiele.


    Das heisst du würdest garkeine Callback-Interrupt Funktion mehr benutzen?


    Das mit dem Hauptprogramm hab ich so verstanden: Ich soll nichts mehr in der Interrupt Schleife ausführen, sondern nur die Werte der Variablen im Interrupt dementsprechend anpassen. In der while- Schleife wird dann die neu definierte Variable verwendet, um meine Ausgaben am Terminal, .txt usw zu erzeugen? Richtig so?


    Quote

    - Dein Code nimmt implizit an, er würde gestartet bei ausgeschalteten Heizung. Doch dann ist Start logischerweise nicht definiert ! Mit dem Queue-Ansatz kann man das leicht reparieren:


    Ist das falsch, dass der Code das implizit annimmt? Die Heizung ist doch zu Beginn ausgeschalten. Falls sie einschaltet, steigt die Spannung und wir haben den Wert == 1 auf dem GPIO, Start wird dabei definiert. Wenn sie wieder ausschaltet, fällt der Wert auf 0.

    Hallo meigrafd!
    Danke für die Tipps!


    Dachte ich habe Start auf null gesetzt, oder täusch ich mich? Gleich nach der Definition von GPIO input/output (zehnte Zeile) steht : Start=0. Oder muss ich da noch was anhängen?
    Wegen dem Callback: Was meinst du genau? Ist es sinnvoller 2 Callback's bzw. zwischen 2 Ereignissen dann zu unterscheiden(anstatt alles in einem Callback zu machen)?
    Das mit close werd ich sofort beheben ;)


    Sorry für die vielen Unklarheiten, aber bin eigentlich Maschinenbauer und kein Softwareentwickler ;)

    Hallo zusammen!


    Wie hoch ist die muss die input-Spannung eines GPIO sein, um ein Ereignis auszulösen, wenn ich folgendes schreibe
    "Falls GPIO 13 eine Spannung erhält (Wert 1), schreibe die zwei Ausgaben ins Terminal"


    Code
    if GPIO.input(13) == 1:#Definiert Start des Signals
               Counter = Counter + 1
               print "Counter: " + str(Counter)
               print "Start Spannungssignal: " + time.asctime(time.localtime())


    Was besagt der Wert "== 1" genau? Müssen dann am GPIO13 genau 3,3 Volt oder 5V anliegen oder reichen dann auch 2 V oder weniger (um eine Ausgabe im Terminal zu erreichen)?
    Greets

    Von den 3 Kabeln habe ich spontan wenig Ahnung, würds einfach mal an einer DC Spannungsquelle ausprobieren, 12V Trafo o.ä.


    Worüber ich stolpere: Über Raspi kann man doch keine hohen Ströme schalten? In deinem Fall würdest du doch den Lüfter direkt über die GPIO's mit Strom versorgen?

    Hallo zusammen, bin ganz neu hier und will gleich mal mein Problem schildern:


    Habe eine Heizung, bei dem ein Ventil schaltet, sollte die Heizung anlaufen (also Öl verbrennen). Diese 230V AC Spannung für das Ventil habe nach oben verlegt und will nun erreichen, dass mein Raspberry Pi 3 fleissig die Einschalt- und Ausschaltzeiten mitschreibt.


    KLARTEXT:
    Ich will eine 230 V AC zu 3,3V DC transformieren. Diese 3,3V soll mein Raspberry dann auslesen. Falls ein Spannungssignal von 3,3V anliegt soll eine Ausgabe ("Start Spannungssignal") mit Zeitangabe erzeugt werden. Sobald 0 V anliegen (Brenner der Heizung aus) soll ebenfalls eine Ausgabe("Ende Spannungssignal") mit Zeitangabe geschrieben werden. Am Ende wird die Dauer zwischen Start und Ende berechnet (Ende-Start).


    HARDWARE (siehe Anhang):
    Habe die 230V AC mithilfe eines Wandlers auf 5V DC transformiert. Dann einen kleinen Spannungsteiler (mit 3x820 Ohm) gebaut, um die Spannung im Verhältnis 1:2 zu teilen. Am Ende habe ich noch einen Widerstand 390 Ohm zum Raspberry eingebracht (nicht in Zeichnung vorhanden; glaube der ist unnötig??).



    SOFTWARE Python:
    Habe das ganze mit einem Interrupt-detect Befehl geschrieben. GPIO input ist GPIO13.
    Falls auf GPIO13 irgendeine Änderung (falling oder rising) stattfindet, wird die Interrupt-Schleife gestartet. Danach wieder in der while Schleifen verweilen.


    Python Programm:



    PROBLEM:


    Wenn ich einen normalen 3,3 V Anschluss eines GPIO's benutze funktioniert das Programm einwandfrei.
    Wenn ich nun den Raspi an die Heizung bzw. an die o.g.Schaltung anschließe, gibt mir der Raspi jede Sekunde eine Spannungsignal Ende zurück. :wallbash:


    Ausgabe im Terminal:



    Der Fehler resultiert aus der nicht vorhandenen Start- Ausgabe (GPIO.RISING).
    Was mache ich falsch? Warum bekomme ich keine Start- Ausgabe, warum wird jede Sekunde ein Ereignis "detected"? Glättet der Transformator die Spannung ungenügend?


    Danke für jede Mithilfe!