FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bond246 am 20 Mai 2015, 15:16:28

Titel: Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 20 Mai 2015, 15:16:28
Hallo zusammen,

ich bastel gerade an einem kleinen Hochschulprojekt, in dem es darum geht, z.B. Rentner in ihrer Lebensweise soweit zu überwachen, dass sie sich sicherer Fühlen für den Fall, dass ihnen im Haushalt etwas zustößt. Z.B. weil sie stürzen oder sowas in der Art.

Um so einen Fall zu simulieren, haben wir uns eine etwas andere Funktionskette überlegt.
Wir haben hier einen RasPi 2B am Start, auf dem ganz üblich Rasbian mit FHEM läuft. Als Schalt I/O gibt es einen HomeMatic Lan-Adapter mit einer Steckdose, die später eine Stereoanlage schalten wird. Unsere Überwachung ist ein Flowmeter (http://www.seeedstudio.com/wiki/G3/4_Water_Flow_sensor), welches direkt auf dem GPIO23 des RasPi steckt.

Idee dahinter ist, dass man früh Morgens eine Aufweck-Unterstützung hat. Wenn 30min nach Weckerklingeln kein Wasser im Bad entnommen wurde, soll die Stereoanlage aktiviert werden.

Jetzt bin ich bereits so weit, dass ich mit einem einfachen Python Script die Funktionsweise des Flowmeter an GPIO23 getestet habe. Um den Flowmeter in FHEM einzubinden wollte ich mich an dieser Anleitung für einen Gaszähler (http://voizchat.de/gaszaehler-verbrauch-erfassen-mit-fhem-und-raspberry-gpio/) langhangeln, da hier letztendlich genauso "nur" ein simpler Aktiv/Inaktiv Befehl am GPIO ankommt.

Also habe ich meinen GPIO Sensor wie folgt in FHEM eingebunden:

define flowmeter RPI_GPIO23
attr flowmeter direction input
attr flowmeter active_low yes
attr flowmeter interrupt both
attr flowmeter pud_resistor up
attr flowmeter toggletostate yes
attr flowmeter room HiFi

define wasserverbrauch HourCounter flowmeter:on flowmeter:off
attr wasserverbrauch room HiFi


Anfangs wurde nach einmaligem Wasserfluss (in den Sensor reinpuste) ein ON State ausgegeben. Leider blieb dieser anschließend auch bei Inaktivität stehen. Jetzt habe ich nacheinander die attribute deaktiviert und wieder aktiviert und es wird manchmal dauerhaft ON, manchmal für längere Zeit OFF ausgegeben. Der HourCounter steht auf 1. Egal wie oft oder stark ich in das flowmeter reinpuste, ich kann nicht erkennen, wie sich der Zähler bzw. die State-Angabe des flowmeter verhält

Was ich jetzt also nicht schaffe ist, dass bei Wasserfluss ON und bei Inaktivität OFF erkannt wird. Letztendlich fehlt mir dazu einfach eine Übersicht, welche Attribute welche Funktion haben und was ich für meinen Fall brauche.

Ich danke euch Vielmals für eure Unterstützung und hoffe möglichst alle nötigen Informationen geliefert zu haben.
Falls mein Anliegen bereits zu speziell ist für diesen Bereich, verschieb das Thema einfach
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: klausw am 20 Mai 2015, 16:03:10
nur zur Sicherheit:

active_low ist meiner Meinung nach überflüssig, da du ja impulse zählen willst
interrupt muss falling oder rising sein, da die Flanken gezählt werden. In diesem Fall bleibt state aber immer on oder off, je nachdem auf welche Flanke getriggert wird (sollte zum zählen aber nicht wichtig sein).
Wenn du interrupt auf both setzt, wird der counter nicht hochgezählt (er wird auch nur bei rising oder falling angelegt).
Das gleiche ist mit dem reading toggle. Das wird nur bei attribut interrupt rising oder falling bedient/angelegt

Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 21 Mai 2015, 00:01:29
Danke für die Antwort. Soweit ich mich erinnere steht im LOG nichts weiter besonderes zu dem flowmeter drin. Ich schau aber nochmal, sobald ich am Geräte sitze (vermutlich erst nächste Woche).

Ansonsten GPIO wurde natürlich nicht mit der Pinnummer verwechselt. Er steckt auf Pin16, Stromversorgung über Pin1 mit 3,3V. Funktioniert genauso wie über die 5V-Versorgung mit 10kOhm dazwischen im Python Programm.

Ansonsten danke schonmal für die Erklärung der attribute.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 27 Mai 2015, 14:00:20
Ich hatte heute wieder Gelegenheit an dem ganzen zu basteln. Komischerweise hat der Wassersensor heute auf Anhieb funktioniert, der Zähler hat gezählt usw... Eigentlich alles so, wie es soll. Ich vermute, ich hatte irgendwo nen Problem in der Verkabelung, eventuell war nen Kontakt nicht voll da.

Jetzt stehe ich so ein wenig vor dem nächsten Problem, wo mir wahrscheinlich die Perl-Kenntnisse fehlen.
Ich will ja, dass z.B. ab 8Uhr das Flowmeter überwacht werden soll und wenn 30min später nicht eine gewisse Mindestmenge an Wasser abgenommen wurde, soll z.B. eine bestimmte Steckdose angehen.

Wie die Zeitschaltung standalone funzt ist mir klar. Wie ich Steckdosen anhand einer Bedigung eines anderen Geräts steuern kann auch. Was mir fehlt ist, wie ich die beiden Zeiten miteinander verknüpfe.
Ich hab ja die Möglichkeit einen Zustand zu einer bestimmten Zeit zu prüfen und dann entsprechende Schaltunge durchzuführen. Aber wie überwache ich Zustände in einem bestimmten Zeitraum, führe am Ende des Zeitraums eine IF-Anweisung und und das so, dass außerhalb des Zeitraums keine Aktionen durch die Funktion ausgeführt werden.?
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: klausw am 27 Mai 2015, 15:10:31
Ich würde einen Timer definieren, der den Counter auf null setzt (z.B. via deletereading) und einen zweiten Timer startet, der 30min später abläuft.
Dieser zweite Timer prüft den Counterwert und kann eine Lampe oder sonstwas anschalten, wenn dieser zu klein ist.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bapt. Reverend Magersuppe am 27 Mai 2015, 22:10:41
Und wenn der Rentner jetzt um 7 aufsteht, Zähne putzt und die Klospülung aktiviert? Dann sitzt er um 7:45 vielleicht schon im Bus nach Malente... Und das Flowmeter wartet tagelang auf irgendeinen Flow.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 28 Mai 2015, 10:17:57
Zitat von: Bapt. Reverend Magersuppe am 27 Mai 2015, 22:10:41
Und wenn der Rentner jetzt um 7 aufsteht, Zähne putzt und die Klospülung aktiviert? Dann sitzt er um 7:45 vielleicht schon im Bus nach Malente... Und das Flowmeter wartet tagelang auf irgendeinen Flow.

Deinen Wecker musst du auch ausschalten, wenn du eher aufstehst. Aber es wäre ja kein Problem, die Stereoanlage einige Minuten später wieder zu deaktivieren.

Wie verknüpfe ich denn Timer? Genauso wie wie beim set-Befehl?
set steckd on;;set steckd off
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: klausw am 28 Mai 2015, 14:22:05
Schau doch mal hier (http://fhem.de/commandref.html#at)

Du gibts dem Timer beliebige Befehle mit. Anstelle von set kannst du auch setreading, deletereading oder auch perl code verwenden.

Wenn du perl code verwendest kannst du mit ReadingsVal("<device>","<reading>",<default>) im Timer z.B. den counterwert auslesen.

Es gibt an verschiedenen Stellen Beispiele in der commandref.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: t_enocean am 28 Mai 2015, 14:37:19
Hausautomatisierung und "Lebensweise ... zu überwachen" widerspricht sich meines Erachtens ein wenig.

Ich lebe zeitweise alleine und habe mit FHEM meine Rolladen/Lichtsteuerung automatisiert. Die Nachbarn sorgen sich jetzt schon liebevollerweise, weil sie quasi nicht mehr erkennen können, ob ich da bin bzw. noch lebe.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 01 Juni 2015, 15:54:55
Guten Tag,

ich habs jetzt über deletereading und setstate versucht, genauso wie setreading. Problem bei allen ist, dass nach Wasserfluss wieder der alte Stand des Wertes hergestellt wird und einfach weitergezählt wird.

Ich kann ja  aber auch einfach zum Zeitpunkt des Weckers den Wasserstand auslesen und 30min später checken, ob sich der Wert um mindestens 5 erhöht hat. Dazu muss ich aber zum Weck-Zeitpunkt den aktuellen Wert auslesen und in eine Variable schreiben. Und da scheitert es wieder. Ich hätte gedacht, das geht eventuell mit CustomReadings oder UserReadings. Aber da hab ich ehrlich gesagt nicht durchgesehen, wie ich die wenn dann für meinen speziellen Fall konfiguriere.

Ob es sich um 5 oder 10 erhöht, ist fiktiv. Aber ich will nicht checken, ob überhaupt was passiert. Wenn irgendwo ein Wasserhahn tropft, dann funzt das wieder nicht richtig.

Um meinen aktuellen Stand kurz zu dokumentieren hier nochmal meine config:
#Flowmeter definieren
define flowmeter RPI_GPIO 23
attr flowmeter active_low yes
attr flowmeter direction input
attr flowmeter icon measure_water_meter
attr flowmeter interrupt both
attr flowmeter pud_resistor up
attr flowmeter room HiFi
attr flowmeter toggletostate yes
define wasserverbrauch HourCounter flowmeter:on flowmeter:off
attr wasserverbrauch icon measure_water_meter
attr wasserverbrauch room HiFi
define FileLog_wasserverbrauch FileLog ./log/wasserverbrauch-%Y%m.log wasserverbrauch:countsOverall:.*\wasserverbrauch:countsPerDay:.*\wasserverbrauch:state:.*
attr FileLog_wasserverbrauch room HiFi

#Wecker schaltet Steckdose
define flowwecker at *15:30 {\
   ReadingsValue("wasserverbrauch","state",0);;\
}
attr flowwecker room HiFi


Ich würde mit "flowwecker" gerne den "wasserverbrauch" auslesen. Ich kann mir aber sicherlich diese Variable zum zwischenspeichern auch im flowwecker definieren.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Prof. Dr. Peter Henning am 01 Juni 2015, 22:25:46
"Ein kleines Hochschulprojekt", soso.
In einem Informatikstudium lernt man, zuerst eine klare Problemanalyse durchzuführen.

Was sind die Use Cases ?
Kann man das eventuell auf einen Zustandsautomaten abbilden ?

Und dann sollte man mit dem coding anfangen.
LG

pah
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 02 Juni 2015, 11:14:05
Hallöchen,

der Use Case ist eigentlich klar. Die Idee für die Umsetzung auch. Nen Zustandsautomaten halte ich nicht für nötig, da das Ziel an dieser Stelle klar ist und die unterschiedlichen Wege dahin sind mir auch klar. Es hängt also nur noch am Code.

Ganz grundsätzlich handelt es sich eben auch um eine (Fach)Hochschulde, nur dass es sowas eben nicht mehr gibt, deswegen nur noch Hochschule. Wir zeichnen uns dadurch aus, aktiver in der Praxis zu sein. Also Plan im Kopf zusammenfrickeln, Testaufbau und dann die nötigen Befehle zum Ziel in die Tastatur hacken. Wenn das definierte Ziel erreicht ist, gehts ans finetuning  ;)

Ich bin mir fast sicher, dass es in meinem Fall an ein bis zwei kurzen Codezeilen hängt.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Prof. Dr. Peter Henning am 02 Juni 2015, 12:21:03
Na, nun mal langsam - und vielleicht mal recherchieren, wo und was ich lehre.

Auch an einer Hochschule für Angewandte Wissenschaften "frickelt" man nicht einfach los - meinen Studenten würde ich die Ohren abreißen, wenn sie so vorgehen würden.

LG

pah
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 02 Juni 2015, 12:33:51
Bin ich voll auf deiner Seite. Ohne Plan kein strukturiertes Vorgehen. Und so handle ich auch.
Nun bringt uns oder besser gesagt mich, die Diskussion nicht sonderlich weiter.

Meine grundsätzliche Idee kommt hier her http://www.raspberry-pi-geek.de/Magazin/2014/01/Aktivitaetsueberwachung-fuer-allein-lebende-Senioren
Auf dem Weg dahin geht es erstmal darum, die oben genannten Funktionen umzusetzen. Ob danach überhaupt noch weiter an der Umsetzung aus dem Link gearbeitet wird, weiß ich noch nicht. Vermutlich kommen später zumindest in der Theorie noch Bewegungssensoren dazu, die Aktivitäten in der Wohnung überwachen.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Prof. Dr. Peter Henning am 02 Juni 2015, 13:44:39
Mein Tipp ist wirklich: Einen Zustandsautomaten zu definieren. Denn nur damit kann man die Vielzahl der Möglichkeiten im Überblick behalten.

LG

pah
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: duke-f am 02 Juni 2015, 14:10:31
 :)
Da hab' ich auch wieder was neues gelernt: Zustandsautomat. War mir so nicht bekannt, scheint aber für so manches Problem ein recht zielführender Ansatz zu sein.

Als "Hobbyprogrammierer" fehlen einfach da und dort die Grundlagen...
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 02 Juni 2015, 14:37:54
Muss der Zustand vom Anfang nur noch abgespeichert werden. Später lässt er sich dann vergleichen mit einer
IF readingsVal > ...

Ich weiß nur nicht, wie ich speichere. Daran ändert auch ein aufgeschriebener Zustandsautomat nichts.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: frank am 02 Juni 2015, 14:47:48
ZitatIch weiß nur nicht, wie ich speichere.
entweder in einem reading mit "setreading my_device my_reading xy", oder in einem dummy mit "set my_dummy xy".

ausserdem heisst es "ReadingsVal". commandref ist dein freund.  :)
Titel: Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: JoWiemann am 02 Juni 2015, 14:50:12
Und ich würde mir mal den Watchdog von Fhem ansehen. Benutze ich um festzustellen, ob meine Schwiegermutter die Tür in einem definierten Zeitraum nach einem Klingeln öffnet und auch wieder schließt.



Grüße Jörg

Gesendet von iPhone mit Tapatalk
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: JoWiemann am 02 Juni 2015, 14:53:44
Ach ja, wer soll eigentlich das ganze System installieren? Mit Sanitärinstallateur kommen da sicher Euros im dreistelligen Bereich zusammen.


Grüße Jörg

Gesendet von iPhone mit Tapatalk
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: duke-f am 02 Juni 2015, 14:58:51
Na, solche Projekte sind ja nicht ganz unüblich, siehe hier:
http://www.bz-berlin.de/berlin/berlin-altert-doch-das-smart-home-hilft-senioren (http://www.bz-berlin.de/berlin/berlin-altert-doch-das-smart-home-hilft-senioren)
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 02 Juni 2015, 15:25:43
Danke für den Watchdog Hinweis. Ich glaube das könnte genau das richtige für mich sein.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Prof. Dr. Peter Henning am 02 Juni 2015, 15:37:09
Na, dann schaut mal bezgl. eines Zustandsautomaten auf das hier:

http://www.fhemwiki.de/wiki/1W-WPump

Ich bin derzeit in verschiedenen Forschungsaktivitäten zum Ambient Assisted Living zu Gange.
Eine Erkenntnis darau: es gibt eigentlich keinen besseren Weg als Zustandsautomaten, um das Verhalten von Maschinen auf das von Menschen abzustimmen.

LG

pah


Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 03 Juni 2015, 17:09:38
Ich hab eben die Idee mit watchdog getestet, bin jedoch an ein paar Grenzen für meinen Fall gestoßen. Zuerst wollte ich die Watchdog Trigger mit ReadingsVal setzen. Als das nicht funktioniert hat, hab ich rausgefunden, dass ich scheinbar nur Binärwerte auswerten lassen? Also sowas wie lamp on

Außerdem kann ich wohl den Watchdog nicht zeitgesteuert aktivieren. Also z.B.
at 15:00 watchdog ReadingsVal(x,y,0) 00:00:30 {ReadingsVal(x,y,0)+5)

Um das zumindest theoretisch zu löschen und anderen Werte zu testen, hab ich folgenden Code gebastelt
define test dummy
define test2 at *16:06:40 set test on

define flowwecker watchdog test:on 00:00:10 flowmeter:on set St_schalter on;; setstate flowwecker defined;; set test off


Das funktioniert auch. Allerdings will ich sicherstellen, dass ein on-Befehl nicht zufällig kommt, sondern eben mehr als einer. Deswegen im ersten Code-Beispiel das "+5".

Jetzt hätte ich noch die Idee, mit setreading ein den aktuellen Wasserstand in mein flowwecker zu schreiben.
Allerdings funktioniert folgendes Codebeispiel nicht, weswegen ich da noch nicht weiter bin als überhaupt erstmal zu testen, ob ein setreading so funktioniert wie ich es mir vorstelle.

define flowwecker at 15:00 setreading flowwecker abfrage ReadingsVal(wasserstand,stats,0)


Er schreibt einfach den gesamten Befehl in das Reading, statt das Ergebnis aus der Funktion ReadingsVal.
Titel: Antw:Flowmeter auf RasPi mit GPIO korrekt einbinden
Beitrag von: Bond246 am 19 Juni 2015, 21:10:48
Hallo zusammen,

gibt es hier noch Ideen zu meinem letzten Stand?