WaterFlow Sensor am PI

  • Hallo zusammen,
    ich habe mir einen Waterflowsensor gekauft. damit möchte ich die Durchflußmenge meines Aquarienfilters berechnen.
    Nach einigem hin und her habe ich den Sensor mit dem PI verbunden und ein Python Script gefunden, welches mir die Anzahl der Impulse anzeigt.
    Nun habe ich das Problem, dass ich nicht die Literzahl pro minute / Stunde angezeigt bekomme, sondern nur die empfangenen Impulse. Laut der WikiPage wird die Lizerzahl mit folgender Formel berechnet:

    Code
    (Pulse frequency x 60) / 5.5Q, = flow rate

    Mein Script sieht nun so aus:

    Was ich nun bräuchte und es nicht auf die Reihe bekomme, ist eine Whileschleife, in der der Wert aus Count
    1 Sekunde lang gemessen und dann mit der Formel

    Code
    liter=count*60/5.5

    berechnet wird.
    Dann sollen 10 Sekunden Pause folgen und der ganze Vorgang soll 3 x wiederholt werden.
    Danach soll ein Duchschnittswert aus den 3 berechneten Literangaben in eine Datenbank geschieben (Das bekomme ich selber hin...)
    Danach soll das Script beendet werden.
    Ich habe also das Problem, dass ich die While Schleife nicht auf die Reihe bekomme.

    Danke für eure Vorschläge!!
    LG Markus (CCED)

  • Hi danke für deinen Code,
    aber, ich hatte vergessen, dass ich absoluter Newbie bin (Linux, Python / Raspberry :-))
    An welcher Position müsste ich den einfügen?
    Alle Varianten die ich gerade probiert haben funktionieren nicht.

    :( LG Markus

  • Ich habe noch ein paar stunden gesucht, und ein Script gefunden, welches ich weitestgehend auf meine Bedürfnisse anpassen konnte.
    Nun möchte ich noch das Ergebnis (durchfluss) in eine Datenbank schreiben lassen.
    nun funktioniert alles, nur der Datenbankeintrag nicht!

    Könnt Ihr mir sagen wo ich was falsch gemacht habe?

    LG Markus

    Einmal editiert, zuletzt von cced (31. August 2014 um 21:11)

  • Also ich habe zwar keine Ahnung von Phyton aber irgendwie ist der SQL teil Falsch.
    [code=php]sql = "INSERT INTO A1_Waterflow VALUES ('durchfluss')" [/php]
    [code=php]sql = "INSERT INTO A1_Waterflow (spalte) VALUES ('durchfluss')" [/php]
    Query ist falsch. In welche Spalte soll denn das Script den eintrag machen?

    Oder habe ich selber was auf den Augen :D

    Einmal editiert, zuletzt von funnyzocker (31. August 2014 um 21:43)


  • wird noch ausgeführt, dann fängt das Script wieder von vorne an.
    Dieser Teil hier..


    wird nicht mehr ausgeführt.
    oder habe ich

    Code
    execute('INSERT INTO A1_Waterflow (Waterflow) VALUES (%s)', (durchfluss))


    hier etwas falsch verstanden...???

    LG Markus


  • In deinem Code-Beispiel ist der Code nicht richtig eingerückt. Dein Datenbank-Code steht außerhalb der while-Schleife.

    Danke für den Tipp.
    Habe ich geändert, aber ich sollte es vllt aufgeben....

    und jetzt bekomme ich :

    Code
    Durchfluss = 1280.0 Liter/Stunde
    Traceback (most recent call last):
      File "./flow7.py", line 67, in <module>
        cursor.execute('INSERT INTO A1_Waterflow (Waterflow) VALUES (%s)', (durchfluss))
    NameError: name 'durchfluss' is not defined

    obwohl die Variable 'durchfluss' vorher noch funktioniert :(

    Einmal editiert, zuletzt von cced (1. September 2014 um 14:24)

  • Also erst mal ist hier noch ein Fehler drin:

    [code=php]cursor.execute('INSERT INTO A1_Waterflow (Waterflow) VALUES (%s)', (durchfluss))

    try:
    cursor.execute(sql)[/php]

    Du führst zuerst den SQL-Befehl mit execute aus, danach versuchst du einen weiteren Behl auszuführen? Abhängig von der Variable "sql", die ist aber nirgends definiert. Irgenwie stimmt da auch sonst nix, hier mal ein Template, das funktioniert:

    [code=php]import MySQLdb as db
    from contextlib import closing

    try:
    with closing(
    db.connect(
    "10.49.214.200",
    "pi",
    "n4k6i0z2",
    "aqua"
    )
    ) as connection:
    connection.cursor().execute(
    'INSERT INTO A1_Waterflow (Waterflow) VALUES (%s)',
    (durchfluss)
    )
    connection.commit()
    except db.Error, e:
    mysql_error_code = str(e.args[0])
    mysql_error_message = str(e.args[1])
    print mysql_error_code, mysql_error_message
    [/php]

  • ich danke dir!
    damit werde ich weiterkommen!

    LG Markus

    mobby, Vielen dank nochmal für deine Unterstützung.
    Jetzt läuft alles wie es soll.
    Für alle, die der Waterflowsensor auch interessiert, hier nochmal der gesammte (endlich dank mobby funktionierende) code.

    LG Markus

    Einmal editiert, zuletzt von cced (1. September 2014 um 14:45)

Jetzt mitmachen!

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