FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: sun1907 am 07 Januar 2013, 14:30:40

Titel: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 07 Januar 2013, 14:30:40
Liebes Forum,

ich bitte um Hilfe zu einem Problem:

Ich habe folgende Sache laufen, was auch klappt:

# ****************** Anwesenheitsschaltung
# **************** Anwesenheit von 1 Handy
define Anwesenheit_1 dummy
attr Anwesenheit_1 loglevel 6
attr Anwesenheit_1 room Anwesenheit
define Job_Anwesend1 at +*00:05:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.45";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_1 on");; \
  } \
  else { \
    fhem("set Anwesenheit_1 off");; \
  } \
}

# **************** Anwesenheit von 2 Handy
define Anwesenheit_2 dummy
attr Anwesenheit_2 loglevel 6
attr Anwesenheit_2 room Anwesenheit
define Job_Anwesend2 at +*00:05:30 { \
  use Net::Ping;; \
  my $ip = "192.168.3.34";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_2 on");; \
  } \
  else { \
    fhem("set Anwesenheit_2 off");; \
  } \
}


Nun möchte ich aber beide Jobs (oben) miteinander so verbinden, dass wenn beide mehr als 24 Stunden abwesend, ein weiterer Job gestartet wird.
Ist mein Code hierzu soweit richtig ?.


# *************** 48 Stunden Abwesenheit
define BeidebwesendCheck at +*09:00:00 { \
if ("Anwesenheit_1 off") && ("Anwesenheit_2 off") { \
fhem("define abwesend_beide at +24:00:00 set Abwesendsschaltung on");; \
} \
else { \
fhem("set Abwesendsschaltung off");; \
} \
}


In der besagten "Abwesendsschaltung" schaltet sich dann mind. eine Lampe zu einem bestimmten Rhytmus ein, um so "Anwesenheit" vorzutäuschen.

Vielen Dank für Hilfe.
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 07 Januar 2013, 14:46:43
Hallo,

an sich sieht das gut aus.
Wenn es funktioniert ist es auch richtig ;-)
Ausprobieren hilft weiter.

Was mir aber aufgefallen ist ...
du prüfst täglich um 9 Uhr - soweit ok.
Wenn beide ab 09:01 abwesend sind dauert es 23:59 Stunden bis zur nächsten Prüfung und dann nochmal
24 Stunden bis das define greift.
Ist soweit ja nicht schlimm aber wäre es nicht besser zu prüfen ob beide weg sind
wenn einer (egal welcher) Abwesend ist?

Handy1 meldet um 07:00 Anwesend off
Prüfung - ok, Handy2 ist noch da.
Handy2 meldet um 10:00 Anwesend off
Prüfung - ok, nach Ablauf von 24 Stunden mach was.

Nur solltest du dann bei vorzeitiger Rückkehr das 24-Stunden-define wieder löschen
da sonst der Code dennoch ausgeführt wird auch wenn ein Handy wieder Anwesend ist.

Nur so als Idee gedacht.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 07 Januar 2013, 14:49:41
Ach, Tante EDITH ;-)

du prüfst ja alle 9 Stunden wenn ich das richtig im Kopf habe und nicht
um 09:00 Uhr.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 07 Januar 2013, 17:02:12
Danke @puschel74

Genau !. Ich möchte alle 9 Stunden überprüfen, ob BEIDE Handys offline sind. Sollte dieses der Fall sein, also BEIDE sind offline, startet FHEM den Job nun 24 Stunden zu schauen, ob in den kommenden 24 Stunden keiner von beiden doch online kommt. Ist nach 24 Stunden immer noch keine Änderung (beide waren die letzten 24 h offline), soll die Abwesenheitsschaltung ihre Arbeit machen.

Ich habe aber ebenso nun noch nach deiner Idee ein delete eingesetzt:


define BeidebwesendCheck at +*09:00:00 { \
if ("Anwesenheit_1 off") && ("Anwesenheit_2 off") { \
fhem("define abwesend_beide at +24:00:00 set Abwesendsschaltung on");; \
} \
else { \
fhem("delete abwesend_beide ;; set Abwesendsschaltung off");; \
} \
}
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 07 Januar 2013, 17:22:57
Hallo,

wenn ich das

Zitat von: sun1907 schrieb am Mo, 07 Januar 2013 17:02Danke @puschel74

Genau !. Ich möchte alle 9 Stunden überprüfen, ob BEIDE Handys offline sind. Sollte dieses der Fall sein, also BEIDE sind offline, startet FHEM den Job nun 24 Stunden zu schauen, ob in den kommenden 24 Stunden keiner von beiden doch online kommt. Ist nach 24 Stunden immer noch keine Änderung (beide waren die letzten 24 h offline), soll die Abwesenheitsschaltung ihre Arbeit machen.


richtig verstanden habe prüfst du in der Abwesenheitsschaltung ob eines der beiden Handys in den nächsten 24 Stunden nicht doch online kommt?

Das wird aber damit
fhem("define abwesend_beide at +24:00:00 set Abwesendsschaltung on");; \
nicht ganz funktionieren oder liege ich da falsch??
Das at sagt doch das Abwesendschaltung in 24 Stunden on gesetzt wird, oder nicht?
d.h. aber nicht das Abwesendschaltung die kommenden 24 Stunden schon was macht.
Ok. Ich weiß ja nicht wie du noch die Prüfung auf Anwesenheit ausarbeitest aber mir ist grad noch was aufgefallen.

Mit
define BeidebwesendCheck at +*09:00:00 { \
müsste doch eigentlich
fhem("define abwesend_beide at +24:00:00 set Abwesendsschaltung on");; \
alle 9 Stunden definiert werden, die Uhrzeit des at also alle 9 Stunden real nach hinten "wandern".
Wenn die Prüfung zweimal zuschläft, also nach 18 Stunden, und beide Handys sind immer noch offline
wird auch das define ... at neu angelegt und die "ersten" +24 Stunden durch die "zweiten" überschrieben?

Oder bin ich da auf em Holzweg?
Gleich mal ausprobieren.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 07 Januar 2013, 18:10:26
Hallo,

also nochmal zurück rudern.

Den zweiten Teil aus meinem letzten Beitrag kannst du vergessen.
Du bekommst im Logfile von fhem nur Fehlermeldungen das das define bereits vorhanden ist und du es bitte erst löschen solltest bevor du es neu anlegen willst.
Habs grad ausprobiert ;-)

Aber der erste Teil steht noch aus.
Wenn die 24 Stunden einmal gestartet wurden, also zum Prüfungszeitpunkt sind beide Handys offline, prüfst du wie ob ein Handy online kommt?
Mit dem geposteten Code wird nach 24 (+ max. 8:59) Stunden Abwesenheit on geschaltet.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 07 Januar 2013, 18:24:06
Hallo :-)

Also bisher habe ich noch keine Chance gehabt, mal auszuprobieren. Hoffe aber, dass ich es bald machen kann.

Zu deiner Frage:
Im Grunde wird ja im ersten Block des Codes, z.B.

define Job_Anwesend1 at +*00:05:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.45";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_1 on");; \
  } \
  else { \
    fhem("set Anwesenheit_1 off");; \
  } \
}


geprüft (alle 5 Minuten), ob ein Handy ON ist. Wenn JA wird ja im Grunde an der vorhandenen aktuellen Schaltung im FS20/FHEM-Netz nichts verändert.

Der Anwesenheitscode soll ja demnach ERST seine Arbeit verrichten, wenn wirklich BEIDE Handys für mind. 9 Stunden offline sind. Sollte nach z.B 14 Stunden doch wieder eines der beiden ONLINE kommen, soll die Absenheitsschaltung somit "weggeworfen" werfen und es wird erst wieder nach weiteren 9 Stunden wieder von vorne geprüft werden. Ist aber definitiv nach 24 Stunden ununterbrochen OFFLINE von BEIDEN Handys festgestellt, dann soll die Abwesenheitsschaltung aktiv werden und ihren eigenen Job machen.
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 07 Januar 2013, 19:00:06
Hallo,

tut mir leid das ich dir hier einen kleinen "Rückschlag" verpassen muss.
Das klappt so leider nicht :-(

Mit
define Job_Anwesend1 at +*00:05:00 { \
prüfst du erstmal nur alle 5 Minuten ob das Handy online ist oder nicht - gehen wir mal nur von einem Handy aus (folgendes gilt für jedes weitere analog).
Wenn ja wird Anwesenheit_1 on gesetzt wenn nein off - und das im 5-Minuten-Takt.

Mit
define BeidebwesendCheck at +*09:00:00 { \
prüfst du dann ob das Handy offline ist - und nicht ob es in den letzten 9 Stunden mal online war.
Wenn du nach 8:50 Stunden das Handy mitnimmst wird, spätestens, nach 5 Minuten (8:55) der Status auf off gesetzt und nach 9 Stunden trifft die Prüfung zu.
Nun startet
fhem("define abwesend_beide at +24:00:00 set Abwesendsschaltung on");; \
und dieser Timer läuft gnadenlos durch bis 24 Stunden rum sind und schlägt dann zu, wenn du nicht zufällig zur nächsten Prüfung nach 9 Stunden wieder online
bist - nicht online warst.
Nicht vergessen: Du setzt im 5 Minuten Takt on oder off.
Worst case.
Dein Handy ist zufällig zweimal hintereinander zur 9-Stunden-Prüfung offline, schlägt 6 Stunden nach der zweiten Prüfung (2x9+6=24) der 24 Stunden Timer zu
und deine Abwesenheitssimulation startet.

Sollte ich komplett falsch liegen mit meinem Gedankengang bitte ich dies zu entschuldigen und mich aufzuklären.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 08 Januar 2013, 07:59:05
@puschel74

Habe es nun erstmal so gelöst, was auch zu funktionieren scheint:


define Anwesenheit_1 dummy
attr Anwesenheit_1 loglevel 6
attr Anwesenheit_1 room Anwesenheit
define Job_AnwesendAlex at +*00:05:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.45";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_1 on");; \
    fhem("define ABW1 at +00:05:00  delete abwesend_beide");; \
  } \
  else { \
    fhem("set Anwesenheit_1 off");; \
  } \
}

define Anwesenheit_2 dummy
attr Anwesenheit_2 loglevel 6
attr Anwesenheit_2 room Anwesenheit
define Job_AnwesendLena at +*00:05:30 { \
  use Net::Ping;; \
  my $ip = "192.168.3.34";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)) { \
    fhem("set Anwesenheit_2 on");; \
    fhem("define ABW2 at +00:05:00 delete abwesend_beide");; \
  } \
  else { \
    fhem("set Anwesenheit_2 off");; \
  } \
}


define BeidebwesendCheck at *21:45:00 {\
  if ("Anwesenheit_1 off") && ("Anwesenheit_2 off") {\
  fhem("define abwesend_beide at +36:00:00 set Urlaubsschaltung on");;\
  }\
  else {\
  fhem("delete abwesend_beide ;; set Urlaubsschaltung off");;\
  }\
}


Es wird also jeden Tag um 21:45 Uhr geschaut, ob beide Handys anwesend sind. Sind beide Handys um diese Zeit OFFLINE (nicht anwesend), fängt der Timer an zu laufen. In diesem Fall 36 Stunden.
Sollte eines der beiden Handys binnen 36 Stunden wieder ONLINE kommen, wird der Timer gelöscht.
Ich denke so ist es nun besser.
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 08 Januar 2013, 08:17:52
Hallo und Guten morgen,

schaut gut aus - sollte auf alle Fälle funktionieren.

Aber warum prüfst du zeitgetriggert ob beide Handys da sind und nicht zustandsgetriggert?
Lass doch jedesmal die Prüfung durchlaufen ob beide Handys off sind wenn eines off geht.

define BeidebwesendCheck notify Anwesenheit.*:off {\
  if ("Anwesenheit_1 off") && ("Anwesenheit_2 off") {\
  fhem("define abwesend_beide at +24:00:00 set Urlaubsschaltung on") if (Value(abwesend_beide) eq "");;\
  }\
  else {\
  fhem("delete abwesend_beide ;; set Urlaubsschaltung off") if (Value("abwesend_beide) ne "");;\
  }\
}


Sollte so klappen (oder auch nicht).
Sobald eines der beiden Anwesenheit (_1 oder _2) auf off geht wird geprüft ob beide Handys off sind.
Wenn ja wird der 24 Stunden-Timer gestartet.
Wenn beide Handys ausser Haus sind springt deine Urlaubsschaltung nach spätestens 24:04:59 an.

Oder aber mit einem
define BeidebwesendCheck notify Anwesenheit.*:.* {\
  if ("Anwesenheit_1 off") && ("Anwesenheit_2 off") {\
  fhem("define abwesend_beide at +24:00:00 set Urlaubsschaltung on") if (Value("abwesend_beide") eq "");;\
  }\
  else {\
  fhem("delete abwesend_beide ;; set Urlaubsschaltung off") if (Value("abwesend_beide") ne "");;\
  }\
}

sollte der Code bei jedem Zustandswechsel ausgeführt werden und wenn ein Handy on kommt sollte der
Else-Zweig geprüft werden.
Die beiden if-Abfragen sind zwar nicht unbedingt nötig, lockern das Logfile aber etwas auf ;-)
Mit diesem Code würde ich aber in der Handy-on/off-Prüfung den Status nur ändern lassen wenn er vorher
anders war.
Sprich: Handy1 on wenn vorher off und Handy2 genauso.
Vorteil: Der Code für die Urlaubsschaltung wird nur durchlaufen wenn sich der Status eines der beiden Handys
ändert und nicht alle 5 Minuten.

fhem("set Anwesenheit_2 on") if (Value("Anwesenheit_2") eq "off");; \

Aber wie schon gesagt: Alles nur als Tipp bzw. Idee oder Vorschlag zu verstehen.
Ich nehme hier nicht in Anspruch durchdachten und fehlerfreien Code zu produzieren ;-)
Aber ich halte es mit meiner FHEM-Installation so, das ich so wenig Prüfungen (Statusänderungen) wie möglich
und so viele Prüfungen (Statusänderungen) wie gerade notwendig sind, durchführen lasse.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 08 Januar 2013, 08:37:07
Danke für den Tip, werde ich auch mal probieren !!.


Aber nun was Anderes. Seit gestern Nachmittag erzeugt mir das Log folgenden Fehler und werde dösig und finde nicht wieso und warum.
Es wurde nichts geändert, gestern und nun bringt er mir ständig im Sekunden- oder Minutentakt diese Meldung. Ich habe gerade auch noch mal FHEM neu gestartet

2013.01.08 08:31:11 3: FHZ opening FHZ device /dev/ttyUSB0
2013.01.08 08:31:11 3: FHZ opened FHZ device /dev/ttyUSB0
2013.01.08 08:31:13 1: Including /usr/local/FHEM/var/log/fhem.save
2013.01.08 08:31:32 3: FHZ1300: Unknown code 810a04014020a00100000000, help me!
2013.01.08 08:31:59 3: FHZ1300: Unknown code 810a04014020a00100000000, help me!
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: Puschel74 am 08 Januar 2013, 08:55:39
Hallo,

das sieht danach aus das deine FHZ zwar Daten empfängt - FHEM damit aber nichts
anzufangen weiß.

Da kann ich dir leider auch nicht weiterhelfen.
So Meldungen habe ich auch ab und an mal im Logfile aber bei mir hält es sich
in Grenzen.

Evtl. liest ja einer von den FHZ-Kennern mit und kann dir genaueres oder vllt.
sogar einen Lösungsvorschlag sagen.

Grüße
Titel: Aw: An/Abwesenheit Hilfe
Beitrag von: sun1907 am 08 Januar 2013, 09:08:51
Danke, dann werde ich das lieber noch mal unter einem passenderen Thema starten, damit auch andere dann später was damit anfangen können.