Bewegung aller Bewegungsmelder in einem GPLOT darstellen

Begonnen von fhem-challenge, 20 Januar 2017, 11:36:49

Vorheriges Thema - Nächstes Thema

fhem-challenge

Guten Tag,

ich habe nun mittlerweile 14 Bewegungsmelder in/und um das Hause "verbaut". Ich suchte nach einer einfachen Lösung, die Bewegung aller dieser Bewegungsmelder darzustellen.

Ich habe es nun mit einem GPLOT erreicht (siehe Attachment) und ein wenig "code". Damit kann man nun leicht erkennen (an einem "dot") , wann eine Bewegung statt gefunden hat. Mit dem beigefügten GPLOT ist es möglich 8 Bewegungsmelder auf einem GPLOT sinnvoll sichtbar zu machen.

Was mache ich: Ich füge für jeden Bewegungsmelder ein eigenes Reading ein "move", welche lediglich den Wert "1" bekommt, wenn eine Bewegung erkannt wird. Diese "Normierung"  ist erforderlich, da ich unterschiedliche Bewegungsmelder betreibe (HM-SEC-MDIR, IT und Elro sowie FS20). Die HM schreiben bei Bewegung z.B. "motion" und nach einiger (eingestellter Zeit) noMotion. Die IT Bewegungsmelder schicken bei Bewegung ein "on" und nach 5 Sekunden wieder ein "off".  Das alles habe ich mit dem kleinen "notify" und dem Schreiben des "reading" "move" normiert. Damit wird das GPLOT File deutlich einfacher und die zu "loggenden" Daten sind klein, da nur! die aktive Bewegung geloggt wird, und nicht ein etwaiges "noMotion" oder "off". Im GPLOT setze ich dann die Grenzen und setze die Position (Y Achse) auf einen jeweils eigenen festen Wert, pro Bewegungsmelder. Damit lassen sich ganz einfach mehrere Events mehrerer Bewegungsmelder in ein Plot darstellen.

Das Ergebnis sieht dann, für 8 Bewegungsmelder, so aus wie im Bild1.

Wie kann man das nutzen:

1.) An dem jeweiligen Bewegungsmeldern sicher stellen, dass das Reading "move" in das LogFIle kommt (bzw. in diesem Fall in das dblog). Also Am Bewegungsmelder "attr dbloginclude move" ... oder , wer dblogexclude verwendet entsprechend umgekehrt.

2.) das folgende Notify nutzen und die eigenen Bewegungsmelder (xxx|yyy|zzz) dort einfügen (device names). Alternativ kann man auch an jedem Bewegungsmelder ein "userReading" move einfügen, welches dann jeweils "1" bei Bewegung erzeugt. ich finde die notify-Lösung für die vielen Bewegungsmelder einfacher.

#########################################
# Bewegungserkennung fur Plot und dblog #
#########################################
# Bei Bewegung auf einem Bewegungsmelder wird ein reading am Bewegungsmelder erzeugt "move" mit dem Wert "1"
# Dieser wird mit dblogInclude ins dblog geschrieben und kann dann geplottet werden
# Eine Verzoegerung von 2 Sekunden (sleep 2) ist erforderlich, damit der Wert korrekt gelogt (dblog) geschrieben werden kann
\
define move.dblog.motion notify (move.i.ow.*:reading:.on|move.i.HM.*:motion|move.i.it.*:on|move.a.it.*:on|move.a.*:on.*|move.i.ESP.waschraum:motion.*on) {\
\
Log 0,"Bewegung $NAME erkannt";;\
fhem ("sleep 2;;setreading $NAME move 1");;\
}



3.) Das folgende SVG Plot nutzen (ich nutze logdb, wer FileLog verwendet, muss es entsprechend anpassen sowie auch das GPLOT-File)
Mein logdb heisst hier "dblog". Wer einen anderen Namen für dblog nutzt, muss es hier entsprechend anpassen.


##############################
### Logfile fuer alle      ###
### Bewegungsmelder Innen  ###
##############################

# Plot für alle Bewegungen der Bewegugsmelder Innen
define move.Innen SVG dblog:db_move_innen:HISTORY
attr move.Innen alias Bewegung Bewegungsmelder Innen
attr move.Innen captionLeft 1
attr move.Innen label "Bewegung"
attr move.Innen nrAxis 0
attr move.Innen plotsize 800,200
attr move.Innen room Sensoren

# Plot für alle Bewegungen der Bewegungsmelder Aussen
define move.Aussen SVG dblog:db_move_aussen:HISTORY
attr move.Aussen alias Bewegung Bewegungsmelder Aussen
attr move.Aussen captionLeft 1
attr move.Aussen label "Bewegung"
attr move.Aussen nrAxis 0
attr move.Aussen plotsize 800,200
attr move.Aussen room Sensoren



4.) Die angefügte "gplot" File entsprechend den eigenen Bewegungsmelder anpassen (device name sowie Description --> siehe Bild2). Auch hier ggf. den Namen des logdb (hier dblog) ggf. anpassen.

Anbei das GPLOT File: db_move_innen.gplot

# Created by FHEM/98_SVG.pm, 2017-01-19 19:23:57
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Bewegungen innen'
set ytics
set y2tics
set grid
set ylabel ""
set y2label ""
set yrange [0:6.7]

#dblog move.i.HM.Hausflur:move:::$val=9*0.69
#dblog move.i.HM.Wohnzimmer:move:::$val=8*0.69
#dblog move.i.HM.1OG:move:::$val=7*0.69
#dblog move.i.HM.Keller:move:::$val=6*0.69
#dblog move.i.ow.Garage:move:::$val=5*0.69
#dblog move.i.it.beliebig:move:::$val=4*0.69
#dblog move.i.it.hausflur:move:::$val=3*0.69
#dblog move.i.ESP.waschraum:move:::$val=2*0.69

plot "<IN>" using 1:2 axes x1y1 title 'Hausflur' ls l1 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Wohnzimmer' ls l0 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title '1.OG' ls l2 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Keller' ls l8 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Garage' ls l3 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Beliebig' ls l4 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Hausflur IT' ls l5 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 title 'Waschraum/Keller' ls l6 lw 1 with points
   


Viele Grüße!

Andreas

fiedel

...alter Wein in neuen Schläuchen...  ;D
Aber trotzdem schöne Lösung durch Vereinheitlichung der Readings!

Gruß
Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423