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
    1. (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
    1. 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)

  • Wenn countPulse waehrend einem sleep weiterlaeuft, ist es doch ganz einfach:


    (Pseudocode !)


    Code
    1. count = 0
    2. for i in range(3)
    3. start = count
    4. sleep( 1 )
    5. stop = count
    6. liter = (stop - start)*60/5.5
    7. sleep( 10 )

    Einmal editiert, zuletzt von Tell ()

  • 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 ()

  • 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 ()

  • cced : Du stimmt was vorne und hinten nicht. Schau dir diesen Thread an, da bin ich etwas auf das Thema eingegangen. Deinen Fehler siehst du dann schon selbst ;)


    //edit: @funnyzokcer: Haha hab ich mir auch erst gedacht mit den Augen, aber hast recht mit deiner Annahme, da fehlt was. ^^


  • 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
    1. Durchfluss = 1280.0 Liter/Stunde
    2. Traceback (most recent call last):
    3. File "./flow7.py", line 67, in <module>
    4. cursor.execute('INSERT INTO A1_Waterflow (Waterflow) VALUES (%s)', (durchfluss))
    5. NameError: name 'durchfluss' is not defined


    obwohl die Variable 'durchfluss' vorher noch funktioniert :-(

    Einmal editiert, zuletzt von cced ()

  • 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
    [hr]
    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 ()

  • Hallo Markus,


    Ich habe ein ähnliches Projekt mit einem Wasserdurchflussmesser.
    Wie hast du diesen an den Raspberry Pi angeschlossen?


    LG
    Sebastian


  • Hallo Sebastian,


    Schwarz gnd, rot 5v und gelb an beliebigen gpio.


    Siehe auch http://www.apip.info.


    Viel erfolg