Hallo,
ich mache hier mal ein neuen Beitrag auf.
Habe derzeit eine Anwesenheitsprüfung am laufen. Alle 1-2 Minuten wird per Ping der dummy auf ON oder OFF gesetzt. Nun suche ich eine Lösung das der Status nur dann auf ON gesetzt wird der Status sich innerhalb von 5 minuten nicht verändert hat.
Ich habe immer wieder PING Probleme ( Handy außer Reichweite und will dadurch keine Fehlmeldungen (//images/smiley_icons/icon_wink.gif)
Vielleicht hat jemand eine "einfache" idee das zu lösen. Hier der CODE:
# Anwesenheit von Christian, Handy
define Anwesenheit_Chris dummy
attr Anwesenheit_Chris loglevel 6
attr Anwesenheit_Chris room Anwesenheit
attr Anwesenheit_Chris setList on off
define Anwesenheit_Chris_FileLog FileLog ./log/Anwesenheit_Chris.log Anwesenheit_Chris
attr Anwesenheit_Chris_FileLog logtype text
attr Anwesenheit_Chris_FileLog room Logfiles
define Job_AnwesendChris at +*00:01:30 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("set Anwesenheit_Chris on");; \
} \
else { \
fhem("set Anwesenheit_Chris off");; \
} \
}
# Anwesenheit von Tanja, Handy
define Anwesenheit_Tanja dummy
attr Anwesenheit_Tanja loglevel 6
attr Anwesenheit_Tanja room Anwesenheit
attr Anwesenheit_Tanja setList on off
define Anwesenheit_Tanja_FileLog FileLog ./log/Anwesenheit_Tanja.log Anwesenheit_Tanja
attr Anwesenheit_Tanja_FileLog logtype text
attr Anwesenheit_Tanja_FileLog room Logfiles
define Job_AnwesendTanja at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.23";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("set Anwesenheit_Tanja on");; \
} \
else { \
fhem("set Anwesenheit_Tanja off");; \
} \
}
Hallo,
das könnte man über einen at-Timer lösen, der erst verzögert den off-Status setzt, und im on-Fall einfach gelöscht wird.
z.B.:
define XX_Off_Notify notify XX:Off { fhem("define XX_Off_Timer at +00:05:00 set XX off") }
define XX_On_Notify notify XX:On { fhem("delete XX_Off_Timer") ;; fhem("set XX on") }
Damit kannst du diese Ausfälle "überbrücken".
Die Namen solltest du natürlich noch anpassen (//images/smiley_icons/icon_smile.gif)
Grüße Reinerlein
oh man bastel die ganze Zeit rum aber bekomm das absolut nicht Kombiniert. nur Fehler
define Job_AnwesendTanja at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.23";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Tanja ;; set Anwesenheit_Tanja on");; \
} \
else { \
fhem("define abwesend_Tanja at +00:05:00 set Anwesenheit_Tanja off");; \
} \
}
Jeder Positive Test verlängert "Anwesenheit_Tanja on" um 5 Minuten. Erst wenn innerhalb dieser 5 Minuten KEIN Test erfolgreich war, wird auf OFF gesetzt.
Beachte, dass das löschen von "abwesend_Tanja" Fehlermeldungen im Log erzeugt, wenn Tanja, nach einer Abweseneheit von länger als 5 Minuten erstmals wieder auftaucht. "Please define abwesend_Tanke first"
Ist aber nur ein kosmetisches Problem, kann man irgnorieren.
Danke werde ich mal testen.
Mal schauen ob das zuverlässig funktioniert.
Okay nun müsste ich nurnoch einen Job basteln..
Tanja war On und ist nun OFF = Heizung ECO
und wenn Tanja OFF und wieder Tanja ON kommt Heizung AUTO
Wie realisiere ich das den nun ? Das lager ich dann am besten in einer anderen Datei aus.
Ich stehe im Grunde vor dem gleichen Problem:
define Anwesenheit_Susi dummy
attr Anwesenheit_Susi loglevel 6
attr Anwesenheit_Susi room Anwesenheit
define Anwesenheit_Susi_FileLog FileLog ./log/Ping-%Y-%m.log Anwesenheit_Susi
attr Anwesenheit_Susi_FileLog logtype text
attr Anwesenheit_Susi_FileLog room Logs
define Anwesenheit_Susi_check at +*00:05:00 {\
use Net::Ping;;\
my $ip = "192.168.125.2";;\
my $p = Net::Ping->new("icmp", 9, 64);;\
my $v=Value("Anwesenheit_Susi");;\
chomp($v);;\
if ($p->ping($ip)) {$v=1;;\
}\
else {$v=0;;\
}\
fhem "set Anwesenheit_Susi $v" if($v ne Value("Anwesenheit_Susi"));;\
}
Ich habe das ursprüngliche Script um eine "Aktualisierung bei Änderung" erweitert und möchte jetzt noch im "else" Bereich einen Retry einbauen, damit bei Abwesenheit noch je 1 Minute verzögert 2x geprüft wird, ob das Gerät wirklich abwesend ist.
Vielleicht kann ja jemand einen Tipp zum Nötigen Code-Schnippsel geben, ich find im Web nichts.
Danke, Tom
Moin,
ich sage zu obigen jetzt mal nichts, weil das nicht zu mir passt.
Ich hänge mal mein eigenes
- aber nätürlich basierend auf den Ideen und Beschreibungen von hier und aus Wiki -
Script hier an, vielleicht kann es ja jemand gebrauchen.
Grundidee:
Es wurde ein Schalter gebraucht, von dessen Stellung es abhängt, ob eine Benachrichtigung gegeben / versandt wird oder eben nicht.
Der Schalter soll eingeschaltet werden, wenn man abwesend ist (wird immer mal vergessen).
Falls er schon eingeschaltet ist soll er nicht nochmal eingeschaltet werden.
Ausserdem soll er auch manuell eingeschaltet werden können zwecks Prüfungen.
Heraus kam der folgende Code,
der funktioniert gut, wenn bei Anwesenheit das Eifon in der Ladestation steckt, dann bleibt das WLAN im Eifon aktiv. Ist das Eifon anwesend, jedoch nicht in der Ladestation, dann verabschiedet sich dan WLAN nach unterschiedlicher Zeit und der Schalter wird dann eingeschaltet. Das ist ein kleiner Nachteil, der mich weiter nicht stört.
Happy Cloning :-)
# Schalter fuer Mails, den gibts nicht als wirkliches Geraet
define A_AlarmMail FS20 0000 00
attr A_AlarmMail eventMap on:EIN off:AUS
attr A_AlarmMail room A
setstate A_AlarmMail AUS
# Hier wird die Online-Abfrage über einen Ping gemacht und alle 60 Sekunden wiederholt
define BinDa PRESENCE lan-ping 192.168.6.29 60
# Wenn es sowieso schon EIN ist, dann muessen wir nicht pingen, darum disablen wir es erstmal
{ if ( Value("A_AlarmMail") eq "EIN") { fhem "attr BinDa disable 1"} }
attr BinDa room A
# Der watchdog wird nach n Minuten aktiv, wenn BinDa absent ist, ich also nicht da bin
define BinDa_wd watchdog BinDa:absent 00:05 BinDa:present { fhem "setstate BinDa_wd defined";; { if ( Value("A_AlarmMail") ne "EIN") { fhem "set A_AlarmMail EIN"} } }
attr BinDa_wd regexp1WontReactivate 1
attr BinDa_wd room A
# Mit diesen notify wird die Stellung des Schalters geprüft und das obige de- oder aktiviert
define BinDa_n_E notify A_AlarmMail:AUS attr BinDa disable 0
attr BinDa_n_E room A
define BinDa_n_A notify A_AlarmMail:EIN attr BinDa disable 1;;setstate BinDa_wd defined
attr BinDa_n_A room A
Einen ausdrücklichen Dank an die Erfinder von FHEM, Doku- und Wiki-Ersteller und die fleißigen Leute hier im Forum.
OK, die Variante lan-ping hab ich irgendwie nicht wahrgenommen :-))
Interpretiere ich das jetzt richtig:
present - Ping alle 60 Sek.
absent - selbiges
Ich hab mir die Doku angesehen, aber hier keine Lösung gefunden den absent-ping zu konfigurieren.
Ziel wäre gewesen:
present - Ping alle 300 Sek.
absent - Ping alle 60 Sek./für 3 Minuten dann Meldung.
Danke nochmal, Tom.
Hallo Tom,
ab morgen steht eine neue PRESENCE Version via update zur Verfügung, wo du deine Timeouts entspreched einstellen kannst
define <name> PRESENCE lan-ping <ip-address> [ <check-interval> [ <present-check-interval> ] ]
# Als Beispiel (60 Sekunden generell, bei Anwesenheit 300 Sekunden)
define Handy PRESENCE lan-ping 192.168.0.10 60 300
Viele Grüße
Markus
Wie jetzt? Frisch gemacht - GEWALTIG!
Danke
Zitat von: Dragonfly schrieb am Sa, 02 März 2013 14:42Wie jetzt? Frisch gemacht - GEWALTIG!
So siehts aus ;-)
Schönes Wochenende noch
Gruß
Markus
Hi Markus,
ich nutze PRESENCE mit android phones und iphones via ping.
Android funktioniert super, iphones werden nur so alle 10-15 Minuten erkannt (was an dem Abschalten des WLANs liegt).
Ist es möglich einen Parameter zu integrieren, der es erlaubt das Setzen von "absent" zu verzögern (ähnlich eines watchdogs)? Also wenn x Minuten kein ping erfolgreich war, dann erst den Status ändern?
Grüße,
Marc
Hallo febus,
direkt innerhalb des PRESENCE Moduls ist das so nicht möglich. Dafür existiert das Modul watchdog. Dieses kannst du benutzten um einen Befehl auszuführen, wenn man 15 Minuten durchgehend abwesend ist.
Zum Beispiel:
# Nach 15 Minuten Abwesenheit (Handy im Status "absent") soll die gesamte Wohnung ausgeschaltet werden.
define watchdog_Anwesenheit watchdog Handy:absent 00:15 Handy:present set Gesamte_Wohnung off ; setstate watchdog_Anwesenheit defined
attr watchdog_Anwesenheit regexp1WontReactivate 1
Weitere Informationen findest du auch im Wiki (//www.fhemwiki.de/wiki/Anwesenheitserkennung)
Viele Grüße
Markus