Wert von Pythonscript in CSV Datei speichern

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Mittwoch 22. Februar 2017, 17:05

Hallo,
ich braeuchte mal eure Hilfe. Um es vorweg zunehmen, mein Wissen um Python und Co
ist nicht weltbewegend. Ich habe den folgenden Code zusammengestellt. Er funktioniert so auch,
obwohl es bestimmt professioneller geht. Nun mein Problem. Wie kann ich den Wert der mit
" print("%1.2f" % delta ) "
ausgegeben wird, extra noch in eine txt oder csv Datei schreiben?
Ich habe dieses Forum schon durchsucht und verschieden Sachen gefunden, aber ich bekomme es nicht
in die Reihe das fuer michzu nutzen.
Ich bin fuer jede Hilfe dankbar.

  1. #!/usr/bin/python
  2. import RPi.GPIO as GPIO
  3. import time
  4. import datetime
  5.  
  6. # Variablen initialisieren
  7. Tic = 0    # Zaehler
  8. stopp = 0  # Zeitpunkt steigende Flanke
  9. start = 0  # Zeitpunkt fallende Flanke
  10. delta = 0  # Zeitdifferenz zwischen start und stopp
  11.  
  12. # GPIO initialisieren
  13. GPIO.setmode(GPIO.BCM)
  14. GPIO.setup(21, GPIO.IN)
  15.  
  16. # internen Pullup-Widerstand aktivieren.
  17. GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP)
  18.  
  19. # Callback-Funktion fuer beide Flanken
  20. def measure(channel):
  21.   global start
  22.   global stopp
  23.   global delta
  24.   if GPIO.input(21) == 0:       # fallende Flanke, Startzeit speichern
  25.     start = time.time()
  26.   else:                         # steigende Flanke, Endezeit speichern
  27.     stopp = time.time()
  28.     delta =  stopp - start       # Zeitdifferenz berechnen
  29.     print("%1.2f" % delta )  
  30.    
  31.    
  32. # Interrupt fuer beide Flanken aktivieren
  33. GPIO.add_event_detect(21, GPIO.BOTH, callback=measure, bouncetime=50)#bouncetime=200
  34.  
  35. try:
  36.   while True:
  37.     # nix Sinnvolles tun
  38.     Tic = Tic + 1
  39.     #print "Tic %d" % Tic
  40.     time.sleep(1)
  41.  
  42. # reset GPIO settings if user pressed Ctrl+C
  43. except KeyboardInterrupt:
  44.   GPIO.cleanup()
  45.   print("\nBye!")
Zuletzt geändert von Anonymous am Mittwoch 22. Februar 2017, 17:47, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon Sirius3 » Mittwoch 22. Februar 2017, 18:10

@erz55: Callback-Routinen sind nicht dazu da, Daten zu speichern oder groß auszuwerten. Am besten verwendest Du eine Queue, um die Ereignisse in das Hauptprogramm (das ja im Moment noch arbeitslos ist) zu übergeben:
  1. #!/usr/bin/python
  2. import RPi.GPIO as GPIO
  3. import time
  4. import Queue
  5.  
  6. # Callback-Funktion fuer beide Flanken
  7. def measure(queue):
  8.     # Flanke und Zeit speichern
  9.     queue.put((GPIO.input(21) == 0, time.time()))
  10.    
  11. def main():
  12.     # GPIO initialisieren
  13.     GPIO.setmode(GPIO.BCM)
  14.     GPIO.setup(21, GPIO.IN)
  15.    
  16.     # internen Pullup-Widerstand aktivieren.
  17.     GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP)
  18.  
  19.     queue = Queue.Queue()
  20.     # Interrupt fuer beide Flanken aktivieren
  21.     GPIO.add_event_detect(21, GPIO.BOTH, callback=lambda _: measure(queue), bouncetime=50)
  22.  
  23.     try:
  24.         while True:
  25.             edge, zeit = queue.get()
  26.             if edge:
  27.                 start = zeit
  28.             else:
  29.                 delta = start - zeit
  30.                 print("%1.2f" % delta)
  31.     except KeyboardInterrupt:
  32.         pass
  33.     finally:
  34.         GPIO.cleanup()
  35.     print("\nBye!")
  36.  
  37. if __name__ = '__main__':
  38.     main()


Dort ist es dann auch nicht schwer, statt des print eine Ausgabe in eine Datei zu schreiben.
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Mittwoch 22. Februar 2017, 18:38

Hallo Sirius3,

erstmal vielen Dank fuer die schnelle Antwort. Habe es gleich getestet.
Als Ausgabe kommt allerdings ein negativer Wert ( z.B. -2.18).
Ist es auch moeglich die Ausgabe so zu machen, das die Zeit zusammen gezaehlt wird?
Also Taster druecken - Zeit lauft - Taster loslassen - Zeit wird gespeichert und ausgegeben - Taster wieder druecken -
Zeit laeuft - Taster loslassen - Zeit wird dazugezaehlt und ausgegeben.
Wie gesagt , ich hab wirklich nicht viel Ahnung von der ganzen Sache. Und es ist auch keine Faulheit von mir.
Deshalb habe ich auch noch keinen Schimmer, wie man es macht den Wert in eine Datei auszugeben.
Kannst du mir bitte helfen.
Benutzeravatar
__deets__
User
Beiträge: 2158
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon __deets__ » Mittwoch 22. Februar 2017, 18:57

Ein bisschen zu versuchen zu verstehen was da passiert bei DEINEM Projekt solltest du schon. Und die Grundlagen der Arithmetik sind ja auch seit der Grundschule bekannt. Wenn da eine negative Zahl bei rum kommt, woran kann denn das liegen? Wo wird denn gerechnet, und was laeuft da falsch?
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Mittwoch 22. Februar 2017, 19:11

Da hast du schon rech und das mit dem Negativwert hab ich rausgekriegt
( Start und Zeit getauscht). Das mit der Grundschule ist aber schon wieder
reichlich 50 Jahre her. :D :D :D
Fuer das andere waere bisschen Hilfe nicht schlecht.
Benutzeravatar
__deets__
User
Beiträge: 2158
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon __deets__ » Donnerstag 23. Februar 2017, 11:53

In eine Datei zu schreiben ist ja nicht wirklich schwierig:

  1. with open("/pfad/zur/datei", "w") as outf:
  2.     wert = 1.0
  3.     outf.write("{}\n".format(wert))


Das musst du nun nur noch geschickt einbauen.
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Donnerstag 23. Februar 2017, 12:29

Da war ich wohl zu langsam. Ich hab es mal so probiert:
  1. try:
  2.         while True:
  3.             edge, zeit = queue.get()
  4.             if edge:
  5.                 start = zeit
  6.             else:
  7.                 delta = zeit - start
  8.                 print("%1.2f" % delta)
  9.                 s = ("%1.2f" % delta)
  10.                 f = file("verbrauch.csv", "w")
  11.                 f.write(s)
  12.                 f.close()
  13.                

Das geht auch. Jetzt probier ich mal das von dir.
Was muss ich jetzt noch machen um das hinzubekommen?
Taster druecken - Zeit lauft - Taster loslassen - Zeit wird gespeichert und ausgegeben - Taster wieder druecken -
Zeit laeuft - Taster loslassen - Zeit wird dazugezaehlt und ausgegeben.
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon Sirius3 » Donnerstag 23. Februar 2017, 13:01

@erz55: Du mußt halt die neue Dauer auf die alte Zeitdauer draufaddieren.
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Donnerstag 23. Februar 2017, 13:39

Muss ich das so verstehen:
Wert aus Datei "verbrauch.csv" lesen.
Gelesener Wert plus aktueller Wert und diesen neuen Wert
wieder in Datei schreiben.
Das ist mir zu hoch.
  1. #!/usr/bin/python
  2. import RPi.GPIO as GPIO
  3. import time
  4. import Queue
  5.  
  6. # Callback-Funktion fuer beide Flanken
  7. def measure(queue):
  8.     # Flanke und Zeit speichern
  9.     queue.put((GPIO.input(21) == 0, time.time()))
  10.  
  11. def main():
  12.     # GPIO initialisieren
  13.     GPIO.setmode(GPIO.BCM)
  14.     GPIO.setup(21, GPIO.IN)
  15.    
  16.     # internen Pullup-Widerstand aktivieren.
  17.     GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP)
  18.  
  19.     queue = Queue.Queue()
  20.     # Interrupt fuer beide Flanken aktivieren
  21.     GPIO.add_event_detect(21, GPIO.BOTH, callback=lambda _: measure(queue), bouncetime=50)
  22.  
  23.     try:
  24.         while True:
  25.             edge, zeit = queue.get()
  26.             if edge:
  27.                 start = zeit
  28.             else:
  29.                 delta = zeit - start
  30.                 print("%1.2f" % delta )
  31.                 s = ("%1.2f" % delta )
  32.                 f = file("verbrauch.csv", "w")
  33.                 f.write(s)
  34.                 f.close()
  35.                
  36.     except KeyboardInterrupt:
  37.         pass
  38.     finally:
  39.         GPIO.cleanup()
  40.     print("\nBye!")
  41.  
  42. if __name__ == '__main__':
  43.     main()
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon Sirius3 » Donnerstag 23. Februar 2017, 14:54

@erz55: wenn Du es schon beschreiben kannst, dann kann es ja nicht mehr zu hoch sein. Aber so kompliziert brauchst Du es Dir ja nicht zu machen, da Du ja weißt, welchen Wert Du im Schritt davor in die Datei geschrieben hast, brauchst Du ihn nicht wieder lesen.
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Donnerstag 23. Februar 2017, 15:21

Soweit versteh ich das schon. Der Wert "delta" wird in die Datei geschrieben.
Jetzt kommt der neue Wert, ist ja auch "delta" und ueberschreibt sofort das alte "delta".
An welcher Stelle soll ich die beiden "delta" addieren. :K
Etwa so:
  1. try:
  2.         while True:
  3.             edge, zeit = queue.get()
  4.             if edge:
  5.                 start = zeit
  6.             else:
  7.                 delta = zeit - start
  8.                 dauer = delta + delta
  9.                 print("%1.2f" % dauer )
  10.                 s = ("%1.2f" % dauer )
  11.                 f = file("verbrauch.csv", "w")
  12.                 f.write(s)
  13.                 f.close()
sebastian0202
User
Beiträge: 162
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon sebastian0202 » Donnerstag 23. Februar 2017, 15:49

Du solltest dir unbedingt Anfänger Tutorials zu Python durchlesen.


  1.     try:
  2.             dauer = 0
  3.             while True:
  4.                 edge, zeit = queue.get()
  5.                 if edge:
  6.                     start = zeit
  7.                 else:
  8.                      # delta = zeit - start
  9.                     dauer += zeit - start
  10.                     print("%1.2f" % dauer )
  11.                     s = ("%1.2f" % dauer )
  12.                     f = file("verbrauch.csv", "w")
  13.                     f.write(s)
  14.                     f.close()
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon Sirius3 » Donnerstag 23. Februar 2017, 15:54

wobei die Klammern bei print und der Zuweisung zu s überflüssig sind, dass der String zweimal erzeugt wird unschön ist, statt "file" "open" zum Öffnen von Dateien verwendet wird und man Dateien am besten mit dem with-Statement öffnet.
  1.             dauer = 0
  2.             while True:
  3.                 edge, zeit = queue.get()
  4.                 if edge:
  5.                     start = zeit
  6.                 else:
  7.                      # delta = zeit - start
  8.                     dauer += zeit - start
  9.                     s = "%1.2f" % dauer
  10.                     print s
  11.                     with open("verbrauch.csv", "w") as f:
  12.                         f.write(s)
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Donnerstag 23. Februar 2017, 16:14

Haette ich so nicht hin bekommen.
Danke an alle die mir weiter geholfen haben.
erz55
User
Beiträge: 9
Registriert: Mittwoch 22. Februar 2017, 15:42
Kontaktdaten:

Re: Wert von Pythonscript in CSV Datei speichern

Beitragvon erz55 » Freitag 24. Februar 2017, 17:16

Hallo nochmal,
ich moechte die Datei "verbrauch.csv" unter /var/www/html erstellen lassen,
so das ich im Netzwerk drauf zugreifen kann.
Bekomme aber immer die Fehlermeldung:
Traceback (most recent call last):
File "/var/www/html/verbrauch.py", line 45, in <module>
main()
File "/var/www/html/verbrauch.py", line 33, in main
f = file("verbrauch.csv", "w")
IOError: [Errno 13] Permission denied: 'verbrauch.csv'

Muss ich da die Berechtigungen aendern?

Danke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder