Hallo zusammen,
hoffentlich habe ich für mein Anliegen das richtige Forum getroffen, wenn nicht gerne ein kleiner Hinweis.
Ich bin gerade auf der Suche nach einer Möglichkeit ein Notify für alle Geräte auszuführen, welche ein bestimmtes userattr (in meinem Fall "subType = motionDetector") zu triggern.
Es handelt sich dabei um Digitale Input PINs eines Arduino, welche ich über die Configurable Firmata eingebunden habe.
Angeschlossen sind Bewegungsmelder (kein Smarthome sondern vorhanden über Kabel verbundene sehr alte Geräte) welche bei Bewegung ein on erzeugen und bei keiner Bewegung ein off.
Das funktioniert auch soweit wie ich möchte.
Die Devices sollen ähnlich den Homematic Bewegungsmeldern im FHEM nutzbar sein.
List eines dieser Bewegungsmelder devices:
Internals:
CFGFN
DEF 12
IODev SYS.gw.AE.Versorgungsraum
NAME SYS.gw.AE.Versorgungsraum_D12
NR 871
PIN 12
STATE Initialized
TYPE FRM_IN
Helper:
Dblog:
Motion:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467668991.23661
VALUE off
Reading:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467668991.23661
VALUE off
State:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467656916.92509
VALUE Initialized
Readings:
2016-07-04 23:49:51 motion off
2016-07-04 23:49:51 reading off
2016-07-04 23:49:51 state Initialized
Attributes:
IODev SYS.gw.AE.Versorgungsraum
alias EGFlur - Bewegungsmelder (alt)
group Schalter
icon people_sensor
room EGFlur,Versorgungsraum
showtime 1
subType motionDetector
userReadings motion { ReadingsVal($name,"reading","off") }
userattr showtime:1,0 subType:motionDetector
verbose 5
Ziel: der state der Geräte soll wie bei den Homematic Bewegungsmeldern in FHEM sichtbar und nutzbar sein.
über 2 notify's steuere ich dann den State, ist im Ergebnis auch das was ich haben möchte.
notify für on
Internals:
CFGFN
DEF SYS.gw.AE.Versorgungsraum_D12:reading:.on setreading SYS.gw.AE.Versorgungsraum_D12 state motion
NAME not.TEST.state.on
NOTIFYDEV SYS.gw.AE.Versorgungsraum_D12
NR 1823
NTFY_ORDER 50-not.TEST.state.on
REGEXP SYS.gw.AE.Versorgungsraum_D12:reading:.on
STATE 2016-07-04 23:55:14
TYPE notify
Readings:
2016-07-04 23:10:27 state active
Attributes:
notify für off
Internals:
CFGFN
DEF SYS.gw.AE.Versorgungsraum_D12:reading:.off setreading SYS.gw.AE.Versorgungsraum_D12 state noMotion
NAME not.TEST.state.off
NOTIFYDEV SYS.gw.AE.Versorgungsraum_D12
NR 1825
NTFY_ORDER 50-not.TEST.state.off
REGEXP SYS.gw.AE.Versorgungsraum_D12:reading:.off
STATE 2016-07-04 23:55:19
TYPE notify
Readings:
2016-07-04 23:10:44 state active
Attributes:
Damit sieht das Device dann so aus wie gewünscht:
Internals:
CFGFN
DEF 12
IODev SYS.gw.AE.Versorgungsraum
NAME SYS.gw.AE.Versorgungsraum_D12
NR 871
PIN 12
STATE noMotion
TYPE FRM_IN
Helper:
Dblog:
Motion:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467669319.9524
VALUE off
Reading:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467669319.9524
VALUE off
State:
Sys.dblog.gw.ae.versorgungsraum:
TIME 1467656916.92509
VALUE Initialized
Readings:
2016-07-04 23:55:19 motion off
2016-07-04 23:55:19 reading off
2016-07-04 23:55:19 state noMotion
Attributes:
IODev SYS.gw.AE.Versorgungsraum
alias EGFlur - Bewegungsmelder (alt)
group Schalter
icon people_sensor
room EGFlur,Versorgungsraum
showtime 1
subType motionDetector
userReadings motion { ReadingsVal($name,"reading","off") }
userattr showtime:1,0 subType:motionDetector
verbose 5
da ich aber mehrere von diesen Bewegungsmeldern habe würde ich ungern für jeden einzelnd die notify's anlegen, mir schwebt da eher vor, das ganze über das userattr zu steuern.
Über ein
list TYPE=FRM_IN:FILTER=subType=motionDetector
erhalte ich genau die Geräte für die das notify triggern soll.
Leider habe ich nichts dazu gefunden, wie man das umsetzen kann.
Danke fürs lesen und hoffentlich viele Hilfreiche Tipps, ich bin auch offen das ganze anders zu lösen, vielleicht bin ich ja immomment nur zu blind für die richtig einfache Lösung.
LG Christian
das einfachste ist die devices so zu benennen das du mit einer regex auf den device namen arbeiten kannst.
wenn das nicht geht (ich wüsste aber nicht warum) dann dann musst du im notify mit perl code arbeiten und den TYPE und subType von hand abprüfen.
gruss
andre
Kann ich Andre nur zustimmen! Namen so geben, dass man auch etwas damit anfangen kann. Und eine der simpelsten Funktionen die ein Name in FHEM leisten kann ist die Verwendung direkt im Befehl/Code.
Meine Lieblingsbeispiele 8)
set Rollo.* on
set Licht.* aus
Das geht natürlich auch im notify!
Gruß Otto
Hallo,
ergänzend: Ich hatte eine ähnliche Fragestellung. Bei mir ging es um Funksignale, die per CUL gesendet werden. Da die manchmal nicht ankommen, sollten sie wiederholt werden.Dazu habe ich mir eine sub gebastelt, die mir die entsprechenden Geräte per Type zu einem Notify zusammenstellen. Also nur so als Gedanke was auch geht:
# Notify für alle IT Devices (CUL)
sub all_TYPE_IT {
my $notify_name = "n_IT_send_repeated";
# Liste mit allen IT's zusammenstellen
my $list = "(";
foreach my $dev ( keys %defs) {
if($defs{$dev}{TYPE} eq "IT") { $list .= $dev."|"; }
}
chop($list);
$list .= ")";
fhem("defmod ".$notify_name." notify ".$list." { mach_irgendwas } ");
}