FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: siggi85 am 01 Februar 2014, 21:57:32

Titel: Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 01 Februar 2014, 21:57:32
Hallo,

ich habe folgendes vor. Wenn meine Freundin und ich nicht mehr zu Hause sind, soll der MediaPC 15 Minuten später herunter fahren. Man kann bei watchdogs ja nur auf eine Statusänderung prüfen. Der Status der Anwesenheit wird bereits über das PRESENCE Modul erkannt. Der Shut Befehl kann natürlich auch mit einem at Befehl erledigt werden.
Zusätzlich soll der Herunterfahren Befehl natürlich nur ein mal durchgeführt werden (und danach nicht alle 30 Sekunden, wenn das PRESENCE Modul alle 30 Sekunden feststellt, dass keiner da ist und das Notify oder der Watchdog ausgelöst wird). Sobald einer aber wieder nach Hause kommt, soll es natürlich wieder triggern wenn beide das Haus verlassen.
Ich hoffe ich habe mein Ziel klar ausgedrückt. Folgendes habe ich bisher versucht, aber nichts hat bisher so funktioniert wie es soll:
define w_nachhausekommen watchdog meinhandy:absent 00:00:10 meinhandy:present set media shutdown;; #trigger w_nachhausekommen .
attr w_nachhausekommen room Status
define nt_nachhausekommen notify (meinhandy|freundinhandy) {\
if (Value("meinhandy") eq "absent" && Value("freundinhandy") eq "absent"){\
fhem("set media shutdown");;\
}else{\
}\
}
attr nt_nachhausekommen room Status

define w_nachhausekommen watchdog meinhandy:absent 00:00:10 meinhandy:present {\
if (Value("meinhandy") eq "absent" && Value("freundinhandy") eq "absent"){\
fhem("set media shutdown");;\
}else{\
}\
};; trigger w_nachhausekommen .
attr w_nachhausekommen room Status

define nt_nachhausekommenich notify meinhandy {\
if (Value("meinhandy") eq "absent" && Value("freundinhandy") eq "absent"){\
fhem("set media shutdown");;\
}else{\
}\
}
define nt_nachhausekommenich notify freundinhandy {\
if (Value("meinhandy") eq "absent" && Value("freundinhandy") eq "absent"){\
fhem("set media shutdown");;\
}else{\
}\
}
attr nt_nachhausekommen room Status
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Puschel74 am 01 Februar 2014, 22:16:32
Hallo,

ZitatIch hoffe ich habe mein Ziel klar ausgedrückt.
Äh  :o fast
Ich bin noch am nochmal durchlesen und überlegen.
Ich les besser nochmal was du geschrieben hast.

ZitatFolgendes habe ich bisher versucht,
Na immerhin schon 3 Codes die aber ??? 2-mal auf 2 Handys triggern und einmal - ich gebs auf.

Du willst wenn --
niemand zuhause ist nach 15 Minuten den MediaPC ausschalten?
Das wars?
Und dafür 3 notify - ach ne 2 notify und 1 watchdog.

Sorry aber kannst du
a) deine Anforderung etwas vereinfachen oder
b) einen Ingenieur beauftragen  :o

Tut mir leid aber ich zerpflück deine Codes nicht und pass sie an deine Anforderung an.

Macht das bitte jemand hier?
Wenn nicht dann bitte
a) klar formulieren was du WILLST
b) klar formulieren woran du scheiterst und
c) Fehlermeldungen aus dem Logfile - so welche vorhanden sind.

Gn8
Grüße
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 01 Februar 2014, 22:46:23
Ok, kein Problem. Hier in Stichpunkten:
- Person 1 und Person 2 sind zu Hause
- Person 1 verlässt das Haus --> nichts passiert
- Person 2 verlässt auch das Haus (niemand mehr da) --> 15 Minuten später fährt Media PC runter


Die verschiedenen Codesegmente sind einzeln zu betrachten und stellen mehrere Lösungsversuche meinerseits dar. Auf die PRESENCE Codezeilen habe ich verzichtet, da die Prüfung ob jemand ("meinhandy" und "freundinhandy") da (present) oder abwesend (absent) ist funktioniert.

In den Codesegmenten sind auch manchmal nur ein 10sec Timer und manchmal gar kein Timer integriert. War halt zum testen, denn es geht mir hauptsächlich um das auslösen einer Aktion, wenn 2 Parameter auf 2 Devices (in diesem Fall PRESENCE Devices) zutreffen.
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Alex am 01 Februar 2014, 23:47:48
Hey,

für ein Codevorschlag fehlt mir leider die Zeit. Aber eine ähliche Idee habe ich schon mal umgesetzt:

Mach doch ein notify auf das Presence Modul. Darin kannst du dann mit if den satutus von dir, deiner Freundin und dem Media Pc abfragen und anschließend ein "define blablabla at +00:15:00 (warum eigentlich mit so einer Verzögerung?) set media off" erzeugen.

Die funktion wird zwar mit jeder Presence- Meldung aufgerufen, aber nur geschaltet wenn ihr weg seid und der Pc an.
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: justme1968 am 01 Februar 2014, 23:56:35
pack  beide presence in eine structure um zustände zu verknüpfen und häng einen watchdog dahinter um das auslösen 15 minuten zu verzögern.

wenn du nach structure und watchdog (in zusammenhang mit presence) suchst wirst du genau finden was du möchtest.

gruss
  andre
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 02 Februar 2014, 10:02:03
Danke für die Antworten, unten steht meine Lösung und sie funktioniert genau so wie ich es mir vorgestellt habe. :)
Die Idee mit der Structure von justme1968 war super! Erst wenn beide PRESENCE Devices den State "absent" annehmen, wird auch der Status der Structure auf "absent" gesetzt. Zusätzlich wird durch das Structureattribut "event-on-change-reading state" der Befehl nur bei der ersten Statusänderung auf "absent" durchgeführt.

Die 15 Minuten sind übrigens da, falls ich alleine zu Hause bin und nur schnell den Müll rausbringe oder ähnliches. ;)



define meinhandy PRESENCE lan-ping 192.168.1.5
attr meinhandy anwesend st_anwesenheit
attr meinhandy event-on-change-reading state
attr meinhandy ping_count 2
attr meinhandy room Status
define freundinhandy PRESENCE lan-ping 192.168.1.6
attr freundinhandy anwesend st_anwesenheit
attr freundinhandy event-on-change-reading state
attr freundinhandy ping_count 2
attr freundinhandy room Status
define st_anwesenheit structure anwesend meinhandy freundinhandy
attr st_anwesenheit event-on-change-reading state
attr st_anwesenheit room Status
define w_nachhausekommen watchdog st_anwesenheit:absent 00:15:00 st_anwesenheit:undefined set media shutdown;; trigger w_nachhausekommen .
attr w_nachhausekommen room Status
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: inesa394 am 16 März 2014, 11:51:49
Hallo

Möchte bei mir ein Windows 7 Pc runterfahren
habe die fhem um diese Zeilen ergänzt
define wol_mediapc WOL BC:xx:F4:xx:10:xx 192.168.2.110
attr wol_mediapc shutdownCmd sh "/home/pi/shutdown.sh"
attr wol_mediapc webCmd on:off

shudown.sh mit diesen Befehl
#!/bin/sh

sudo net rpc SHUTDOWN -I 192.168.2.110 -U user%pass

Den Rest den Codes habe ich beibehalten
nur diese Zeile angepaßt
st_anwesenheit:undefined set wol_mediapc shutdown;; trigger w_nachhausekommen .
Es passiert nichts der PC fährt nicht runter was ist hier falsch an meinen code?
set wol_mediapc on funktioniert dagegen
Das shutdown per script klappt dagegen
./shutdown.sh
Gruß Inesa
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 17 März 2014, 19:09:18
EDIT: Moment mal, versuche mal das, bevor du meinen Text hier drunter probierst:
set wol_mediapc off

Ich habe in meinem Code "shutdown", weil es sich hier um ein XBMC Device handelt. Ein WOL Device wird mit "off" herunter gefahren. Denke hier liegt der Hase im Pfeffer begraben. ;)



Versuch mal:
attr wol_mediapc shutdownCmd "/home/pi/shutdown.sh"

Hier der Auszug aus der Commandref dazu:
attr wol shutdownCmd    "/bin/echo "Teatime" > /dev/console"   # shell command

Ansonsten würde ich erst mal testen ob folgendes Kommando funktioniert
set wol_mediapc shutdown

Falls das alles nicht funktioniert kann ich mir nur noch Berechtigungsprobleme vorstellen. Dann mal am besten folgendes auf der Kommandozeile zum Test eingeben.
chmod 777 /home/pi/shutdown.sh
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: linuxq am 15 Mai 2014, 10:22:21
Hallo Siggi85,

wenn ich versuche, nach Deinem Vorbild meine Schaltungen zu machen, bekomme ich beim speichern der config folgende Fehlermeldung:

Zitatmeinhandy: unknown attribute anwesend. Type 'attr meinhandy ?' for a detailed list. freundinhandy: unknown attribute anwesend. Type 'attr freundinhandy ?' for a detailed list.

Woran kann das liegen?

Gruß

LinuxQ
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 15 Mai 2014, 10:39:48
Zitat von: linuxq am 15 Mai 2014, 10:22:21
Hallo Siggi85,

wenn ich versuche, nach Deinem Vorbild meine Schaltungen zu machen, bekomme ich beim speichern der config folgende Fehlermeldung:

Woran kann das liegen?

Gruß

LinuxQ

Versuche mal diese Zeilen weg zu lassen. Ich glaube die wird beim Anlegen der Structure auf den zugehörigen Devices generiert.
Falls das nicht funktioniert, melde dich noch mal. Dann gucke ich heute abend zu Hause und kopiere hier noch mal die aktuellen Zeilen aus meiner Config rein. :)
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Simon74 am 22 Juli 2014, 11:59:27
Sehr schönes Beispiel, das ich nachgebaut habe und gut funktioniert.
define Zuhause structure anwesend Bluetooth_Simon Bluetooth_Freundin
define Bluetooth_Simon PRESENCE local-bluetooth xx:9B:xx:97:xx:D9 10 60
attr Bluetooth_Simon anwesend Zuhause
attr Bluetooth_Simon event-on-change-reading state
attr Bluetooth_Simon room Anwesenheit

define Bluetooth_Freundin PRESENCE local-bluetooth xx:26:xx:5B:xx:64 10 60
attr Bluetooth_Freundin anwesend Zuhause
attr Bluetooth_Freundin event-on-change-reading state
attr Bluetooth_Freundin room Anwesenheit

attr Zuhause event-on-change-reading state
attr Zuhause room Anwesenheit
attr Zuhause alias Person(en) anwesend
attr Zuhause group Anwesenheitsstatus
define Nicht_Zuhause watchdog Zuhause:absent 00:15:00 Zuhause:undefined set group=Licht off;; trigger Nicht_Zuhause .
attr Nicht_Zuhause room Anwesenheit


Vielleicht kann mir jemand jetzt einen kleinen Anstoss geben, ich möchte folgendes dazubauen:
Auf Basis dieses An- und Abwesenheits Status (Structure) würde ich gerne noch "Mail versenden WHEN Absent AND Bewegungsmelder:Motion".
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 22 Juli 2014, 15:14:21
Zitat von: Simon74 am 22 Juli 2014, 11:59:27
Vielleicht kann mir jemand jetzt einen kleinen Anstoss geben, ich möchte folgendes dazubauen:
Auf Basis dieses An- und Abwesenheits Status (Structure) würde ich gerne noch "Mail versenden WHEN Absent AND Bewegungsmelder:Motion".

Ich würde ein notify bauen, welches bei "Bewegungsmelder:Motion" triggert. Inhalt des Notify:
IF Absent THEN Mail versenden.

Der einzige "Nachteil", es triggert halt bei jedem Mal wenn der Bewegungsmelder was erkennt. Es wird bei PRESENT zwar keine Mail verschickt, aber wenn jemand eine performanceschonenderen Lösungsansatz hat, immer her damit. :)
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: chris1284 am 22 Juli 2014, 17:51:42
ein notify kann man deaktivieren. es ist möglich das von dir genannte notify bei present einfach zu disablen und bei absend wieder zu aktivieren.
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: siggi85 am 23 Juli 2014, 11:24:34
Zitat von: chris1284 am 22 Juli 2014, 17:51:42
ein notify kann man deaktivieren. es ist möglich das von dir genannte notify bei present einfach zu disablen und bei absend wieder zu aktivieren.

Einfache und perfekte Lösung. Danke dafür, diesen Kniff werde ich sicher noch mal benötigen. :)
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: AK-868 am 23 Juli 2014, 14:11:38
Ein Beispielschnipsel für ein Disable vom Notify

fhem ("attr notify_motion_jl disable [b]1[/b]");;\


Enable

fhem ("attr notify_motion_jl disable [b]0[/b]");;\
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Simon74 am 23 Juli 2014, 18:33:18
Ich brauche mehr Details :-)
Den notify "Mail_Bewegengunsmelder_Absent" habe ich mal gebaut, er funktioniert:
DEF:
t5.fl.bm1:motion { if (Value("Zuhause") eq "absent")
{my $DNAME = AttrVal($NAME,"alias",$NAME);DebianMail('mail@adr.net', 'Bewegung im Flur ohne anwesende Person !', $DNAME." ".$EVENT)}
}


Ich frage mich nun wenn ich das aktivieren des notify so einbauen würde:
DEF:
Zuhause:absent 00:10:00 Zuhause:undefined set group=Licht off,attr Mail_Bewegungsmelder_Absent disable 0; trigger Nicht_Zuhause .
..würde das bedeuten das erst 10 Minuten später die Aktivierung stattfinden würde.

Dieselbe Problematik habe ich auch beim deaktivieren:
Ich komme nach Hause, bis mein Smartphone per Bluetooth gefunden wird kann es etwas dauern darum sollte ich hier eine Minute Verzögerung haben.

Bin im Moment ja schon fast zufrieden wenn ich mit den PERL Klammern klar komme, wie ich aber das nun am besten Abbilde.. ?
Bitte um ein Zaunpfahlschwingen :-)
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: AK-868 am 24 Juli 2014, 16:16:37
Über wann die Mail kommt habe ich mir auch Gedanken gemacht. Bin zu dem Entschluss gekommen die Mail einfach zu löschen wenn eine kommen sollte und meine Anwesenheit wie auch immer noch nicht verifiziert wurde.

Mir ist es wichtiger sofort eine Mail zu erhalten wenn der Ernstfall eintritt. So würdest du eine Minute lang deine Mailfunktion brach legen. Somit hätte man eine Minute Zeit sich frei zu bewegen ohne das es bemerkt wird. Vor allem müsste nach der Minute dann ein neues Event kommen das die Mail versendet. Die Mail einfach eine Minute später senden ergibt auch keinen Sinn.


Edit: meint es wäre nicht nur eine Minute sondern 10 ...

Wenn ich weg bin werden sofort Mails versendet. (Bei einem Event)
Wenn ich 10min abwesend bin ohne Rückkehr, wird alles Abgeschalten.

Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Simon74 am 25 Juli 2014, 11:01:36
Nach etwas grübeln denke ich einen Lösungsweg zu haben den ich beschreiben kann, jedoch dürfte mir die PERL-Syntax zu schaffen machen :-)

Die Logik: Wenn eine "Bewegung bei Abwesend" stattfindet sollte nicht sofort ein Mail versendet, sondern ein AT Job der in einer Minute nochmals prüft ob Status immer noch Absend, wenn ja Mail senden.
Damit für jede Bewegung ein Mail generiert wird sollte der Name des AT Jobs dynamisch sein (at_TIME)

define Bewegung_Abwesend notify t5.fl.bm:motion { if (Value("Zuhause") eq "absent")
my $at_TIME=%hh%mm%ss
(define Bewegung_Abwesend_Mail_$at_TIME at +01:00 {if if (Value("Zuhause") eq "absent")} {DebianMail('mail@adr.net', 'FHEM Alarm !', 'Bewegung ohne anwesende Person !')};)
}


Wie jetzt die Syntax richtig aussehen müsste, da werde ich noch länger sitzen :-)
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Simon74 am 25 Juli 2014, 17:50:16
Die Klammerei, Escapen und das hüpfen zw. FHEM, PERL ... ist "schön" ausgetrückt eine kleine Katastrophe.  ::)

Ich habe nun soweit das die Mail 1 Minute verzögert gesendet wird:
t5.fl.bm:motion { if (Value("Zuhause") eq "absent")
{ fhem('define Bewegung_Abwesend_Mail_ at +00:01 { if (Value("Zuhause") eq "absent") {DebianMail(\'mail@@adr.net\', \'FHEM Alarm !\', \'Bewegung ohne anwesende Person !\')}}')}
}


Was mir jetzt noch fehlt ist ein Timestamp, so das mehrere Mails gesendet werden können und nicht mit "notify exist" nicht erstellt werden können
Wenn ich das in die 2. Zeile setze mag er das nicht:
my $attime=sprintf("%02d:%02d:%02d", $hour, $min, $sec);

Wenns funktionieren würde könnte ich:
{ fhem('define Bewegung_Abwesend_Mail_$attime...

Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: Simon74 am 26 Juli 2014, 11:43:43
So, nach ersten Frustabbau eine 2. Variante mit Sleep. Leider lässt sich FHEM in dieser Zeit nicht bedienen.
t5.fl.bm:motion { if (Value("Zuhause") eq "absent")
  { fhem("sleep 60") };
  if (Value("Zuhause") eq "absent")
    { DebianMail('mail@@adr', 'FHEM Alarm !', 'Bewegung im Flur ohne anwesende Person !') }
}


Die at Variante wäre sichlerlich besser, es bleibt dort wie Frage wie der "define Name" mit einer Variable ausgestattet werden kann.
Titel: Antw:Notify / Watchdog - Triggern mit Prüfung von 2 Statussen
Beitrag von: CoolTux am 11 März 2015, 06:56:36
Hallo,

Ich habe da mal eine Idee oder besser Lösungsansatz. Warum wird hier nicht einfach mit Hilfe des Residents Modules gearbeitet. Notify wäre "Ist $RESIDENTS:residentsHome.0 dann tue das oder jenes". Oder denke ich da zu einfach???


Grüße
Leon