Bewegungsmelder (HC-SR501 PIR) liefert keinen Wert (mit Python geht es)

Begonnen von mlrtimbf, 28 Mai 2017, 18:27:46

Vorheriges Thema - Nächstes Thema

mlrtimbf

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!



Amenophis86

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?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mlrtimbf

Der Status ist immer "? ? ?".


Amenophis86

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
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mlrtimbf

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



Amenophis86

naja, wenn der State ??? ist, dann kann ja auch nix schalten. Also müssen wir erst Mal raus bekommen, wieso der State bei ??? bleibt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

LuckyDay

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

mlrtimbf

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!

LuckyDay

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

mlrtimbf

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...

LuckyDay

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.

mlrtimbf

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...

LuckyDay

Ich habe gerade mal das Datenblatt runtergeladen, wie hast du denn den Jumper gesetzt , ich hoffe mal auf single Trigger

mlrtimbf

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...

mlrtimbf

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

Amenophis86

mit dem wait attr. Einfach mal in die CommandRef zu DOIF schauen, ist lang, aber so ziemlich alles drin ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

gamauf

DOIF kennt ein Attribut "wait" siehe commandref
(erst nach eingestellter Wartezeit wird geschaltet, wenn Bedingungen noch erfüllt sind)...

mlrtimbf

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!

Morgennebel

Commandref nochmals lesen. Abschnitt DOIF Attribute.

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

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

mlrtimbf

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

Amenophis86

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".
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Morgennebel

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
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA