FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: mlrtimbf am 28 Mai 2017, 18:27:46

Titel: Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 18:27:46
Hi, ich möchte meine schon vorhandenen und funktionsfähigen Bewegungsmelder (HC-SR501 PIR) an FHEM anbinden.
Bisher mache ich das mit einem Python Script.

Folgendes habe ich in FHEM gemacht:


define RPIPin8 RPI_GPIO 14
attr RPIPin8 direction input
attr RPIPin8 interrupt both

define act_on_BewegungGPIO notify RPIPin8 { if ("$EVENT" ne "off") { fhem("setstate status_flur 1;");}}


Per Python Script wird nun auch eine Bewegungs gemeldet.
Dich in FHEM wird der status "status_flur" nicht auf 1 gesetzt.

Habt ihr ne Idee?

Vielen Dank!


Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Amenophis86 am 28 Mai 2017, 18:53:37
Wenn hier keine Antwort gefunden wird, würde ich dir empfehlen das Thema in den Bereich "Einplatinencomputer" zu verschieben. Dort ist laut Maintainter.txt der Maintainer zu RPI_GPIO.

Ändert sich denn der Status des RPIPin8 bei Bewegung, oder klappt das auch schon nicht?
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 19:17:56
Der Status ist immer "? ? ?".

Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Amenophis86 am 28 Mai 2017, 19:21:51
Bitte keiner Bilder posten, sondern ein "list" des Device machen. Mehr über richtiges Posten von Fehlern etc findest du hier: https://forum.fhem.de/index.php/topic,71806.0.html
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 19:30:26
Hier die Ausgabe:


Internals:
   DEF        14
   GPIO_Basedir /sys/class/gpio
   NAME       RPIPin8
   NR         24
   RPI_pin    14
   STATE      ???
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   filehandle
   Readings:
     Pinlevel:
       TIME       2017-05-28 19:29:29
       VAL
   Fhem:
     interfaces switch
Attributes:
   direction  input
   interrupt  both


Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Amenophis86 am 28 Mai 2017, 19:39:49
naja, wenn der State ??? ist, dann kann ja auch nix schalten. Also müssen wir erst Mal raus bekommen, wieso der State bei ??? bleibt.
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: LuckyDay am 28 Mai 2017, 19:57:46
bischen dürftig , deine Beschreibung, was du bisher gemacht hast um Fhem beizubringen die GPIO zu nutzen

die Kurzversion bei jessie Lite bei mir war.

sudo adduser fhem gpio
sudo apt-get install wiringPi
reboot tut not!!!

mit gpio -v
in der shell prüfen , ob wiringPi tut

steht alles in der commandref und Wiki

in deinem fhemlog steht bestimmt auch noch einiges drin an Fehler
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 20:08:40
Jetzt funktioniert es: "sudo adduser fhem gpio" hat es getan...


Hatte mir die Command-Reg angeschaut... Diesen Punkt aber wohl überlesen :-/

Der Bewegungsmelder wird nun wohl jede Sekunde abgefragt, richtig?
Scheint meinen Raspi ziemlich auszulasten... Kann man da noch irgendwas machen um die Auslastung zu verringern?

Danke!
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: LuckyDay am 28 Mai 2017, 20:33:12
wieso jede sekunde?

fhem wird nur "aktiv" wenn sich der Eingang ändert. ich kenne den HC-SR501 PIR nicht bezüglich Signal am gpio
ich habe noch attr < > pud_resistor up da bei mir nur low geschalten wird
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 20:42:26
Bei den Readings sehe ich, dass dort jede Sekunde aktualisiert wird... Hmm aber geht ja eigentlich auch nicht anders, da der Zustand ja überprüft werden muss ob der Melder grad eine "High" Singal schickt...Mein Raspberry ist halt bei einer Dauerauslastung von ca. 70% seit dem...
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: LuckyDay am 28 Mai 2017, 21:02:58
kann ich nicht bestätigen, weil dann müßte nach deiner Aussage im Eventmonitor die ganze Zeit auch Events von dem Device auftauchen.

Was allerdings stimmt ist, wenn du auf Detail bei dem Device gehst, steht dort immer der aktuelle Pinlevel mit aktueller Uhrzeit drin,
sprich wird abgefragt bei Aufruf der DetailSeite.
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 21:05:16
Hmm tatsächlich tauchen im Event-Monitor ständig Events von dem Device auf (mehrmals pro Sekunde sogar), bspw.:

2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:29 RPI_GPIO RPIPin8 off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:29 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Dblclick: off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Pinlevel: low
2017-05-28 21:04:30 RPI_GPIO RPIPin8 off
2017-05-28 21:04:30 RPI_GPIO RPIPin8 Longpress: off
2017-05-28 21:04:30 CUL_HM Wz.SteckDMess.PC CMDs_done
2017-05-28 21:04:30 dummy Verbraucher.PC 169.11
2017-05-28 21:04:30 CUL_HM Wz.SteckDMess.PC_Pwr b



Scheinbar wird das "Low" Signal dauerhaft geschickt...
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: LuckyDay am 28 Mai 2017, 21:29:31
Ich habe gerade mal das Datenblatt runtergeladen, wie hast du denn den Jumper gesetzt , ich hoffe mal auf single Trigger
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 28 Mai 2017, 21:52:11
Jup, hab ich grad noch einmal geprüft... Ist auf "Single" gestellt.

Wenn ich den interrupt auf "rising" stelle, dann kommt auch nur ein Signal/Event wenn eine Bewegung erkannt wurde.
Wenn ich den interrupt auf "falling" stelle, dann kommt ein Event (wie oben) mehrmals die Sekunde...
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 30 Mai 2017, 22:37:21
So, ich habe es nun soweit unter Kontrolle.

Für den Bewegungsmelder habe ich "event-on-change-reading: state" gesetzt.
Jetzt bekomme ich nur noch "on" oder "off" states als event und nicht mehr ein Dauer "low".

Ein kleines Problem habe ich nun noch:
Ich steure eine Hue Lampe nun bei Bewegung mittels  DOIF:

([RPIPin8:"on"]) (set HUEDevice8 on-for-timer 15)


Das funktioniert auch einwandfrei. Nur leider liefert der Bewegungsmelder des öfteren "Fehlalarme".
Dies Erkenne ich daran, dass das "on" bzw. "high" Signal nur 1 Sekunde besteht und dann direkt auf "off/low" geschaltet wird.
Bei einer richtigen Bewegung bleibt das "on" Signal" für ca. 5 Sekunden bestehen bevor es auf "low" geht.

(Wie) Kann ich dem DOIF nun beibringen, dass erst noch 2 Sekunden gewartet werden soll (um auszuschließen, dass es ein Fehlalarm ist) und dann erst den Befehl zum Schalten der Lampe gibt? Nach den 2 Sekunden müsste also noch mal geprüft werden ob das signal auf "on" steht...

Danke
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Amenophis86 am 31 Mai 2017, 06:27:12
mit dem wait attr. Einfach mal in die CommandRef zu DOIF schauen, ist lang, aber so ziemlich alles drin ;)
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: gamauf am 31 Mai 2017, 09:52:31
DOIF kennt ein Attribut "wait" siehe commandref
(erst nach eingestellter Wartezeit wird geschaltet, wenn Bedingungen noch erfüllt sind)...
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 08 Juni 2017, 18:30:12
Zitat von: gamauf am 31 Mai 2017, 09:52:31
DOIF kennt ein Attribut "wait" siehe commandref
(erst nach eingestellter Wartezeit wird geschaltet, wenn Bedingungen noch erfüllt sind)...

Hi, danke für den Tipp, aber das scheint leider nicht zu funktionieren.

Im Event-Log wird ganz klar ein "on" und "off" Signal innerhalb einer Sekunde geliefert:

2017-06-08 18:25:24 RPI_GPIO RPIPin8 on
2017-06-08 18:25:24 RPI_GPIO RPIPin8 off


Und trotz einer "wait" von "2" geht die Lampe an.
Hier noch mal ein List meiner "DOIF":

Internals:
   DEF        ([RPIPin8:"on"]) (set HUEDevice8 on-for-timer 60)

   NAME       motion_flur
   NR         37
   NTFY_ORDER 50-motion_flur
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-06-08 18:25:24   Device          RPIPin8
     2017-06-08 18:25:26   cmd             1
     2017-06-08 18:25:26   cmd_event       RPIPin8
     2017-06-08 18:25:26   cmd_nr          1
     2017-06-08 18:25:24   e_RPIPin8_events off
     2017-06-08 18:25:26   state           cmd_1
     2017-06-08 18:25:25   wait_timer      no timer
   Condition:
     0          EventDoIf('RPIPin8',$hash,'on',1)
   Devices:
     0           RPIPin8
     all         RPIPin8
   Do:
     0:
       0          set HUEDevice8 on-for-timer 60
     1:
   Helper:
     event      on
     globalinit 1
     last_timer 0
     sleepdevice RPIPin8
     sleepsubtimer -1
     sleeptimer -1
     timerdev   RPIPin8
     timerevent on
     triggerDev RPIPin8
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
     State:
   Trigger:
     all         RPIPin8
Attributes:
   do         resetwait
   wait       2



Eine Idee?

Danke!
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Morgennebel am 08 Juni 2017, 20:34:33
Commandref nochmals lesen. Abschnitt DOIF Attribute.

Lösung selbst erarbeiten, dann hier posten...

Ciao, -MN
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: mlrtimbf am 08 Juni 2017, 21:00:34
Zitat von: Morgennebel am 08 Juni 2017, 20:34:33
Commandref nochmals lesen. Abschnitt DOIF Attribute.

Lösung selbst erarbeiten, dann hier posten...

Ciao, -MN

Auf die Idee bin ich auch schon gekommen... Aber finde wohl nicht den richtigen Command.

"wait" möchte einfach nicht funktionieren... Viel falsch kann man da ja nicht machen.
Anhand dieses Beispiels habe ich mein DOIF ja auch gemacht:


Anwendungsbeispiel: Benachrichtigung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt (Perl-Code wird in geschweifte Klammern gesetzt):

define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300


Meins:
define motion_flur DOIF ([RPIPin8:"on"]) (set HUEDevice8 on-for-timer 60)
attr motion_flur wait 2



Du weißt es anscheint und möchtest es nicht sagen, damit ich es mir erarbeite?!  :o
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Amenophis86 am 09 Juni 2017, 07:04:20
Glaube du hast einen Denkfehler. Du fragst mit deinem DOIF den Status von "RPIPin8" und schaltest "HUEDevice8". Diese Schaltung wird mit wait verzögert und nicht die Abfrage von "RPIPin8".
Titel: Antw:Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)
Beitrag von: Morgennebel am 09 Juni 2017, 09:59:59
Lies das hier noch mal: https://fhem.de/commandref_DE.html#DOIF_do_resetwait

und dann schau Dir noch mal genau Dein list bzw. Dein Gerät an.

Ja, ich bin für Wissenzuwachs für lernen und aufmerksam lesen. Ein paar Hinweise, um die Richtung zu finden, sind natürlich in Ordnung...

Ciao, -MN