FHEM Forum

FHEM => Automatisierung => Thema gestartet von: accessburn am 20 Oktober 2016, 11:06:37

Titel: Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 11:06:37
huhu,
ich möchte meinen Homestatus mit PebbleBees steuern nach relativ simplen Prinzip:

# --- PebbleBee Anwesenheit
define MeinGtAG PRESENCE lan-bluetooth XX:XX:XX... 127.0.0.1:5333 20 120
attr MeinGtAG group PebbleBee
attr MeinGtAG room Wohnzimmer
define pebblebee_presence DOIF ([MeinGtAG:?presence] eq "present") (set Homestatus Zuhause) DOELSE (set Homestatus LangeWeg)


Die Theorie sagt das der Homestatus gesetzt wird nach dem Bee. Wenn ich den Homestatus aber selbst ändere über FTUI z.b., ändert sich der Status dann unmittelbar danach zurück weil das DOIF den Status permanent kontrolliert?

Hat vielleicht jemand eine etwas bessere Lösung dazu oder einfach nur ausgereifter?

MFG Toby
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 11:13:30
Ich steuere über den GTag mein jeweiliges ROOMMATE/GUEST Device.
Der damit folgende Status des RESIDENTS Devices wird dann für ein notify (oder DOIF) benutzt um den Homestatus entsprechend anzupassen.

Gruß
Dan

EDIT: Der Homestatus wird bei mir überhaupt nicht manuell verändert sondern nur über den Status des RESIDENTS Devices.
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 11:20:12
Zitat von: DeeSPe am 20 Oktober 2016, 11:13:30
EDIT: Der Homestatus wird bei mir überhaupt nicht manuell verändert sondern nur über den Status des RESIDENTS Devices.

Das möchte ich aber weiterhin kontrollieren können da der Bee ja nur "da" und "nicht da" angeben kann.
Ich selbst habe aber zwei Staten mehr zur Auswahl.
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 11:36:28
Zitat von: accessburn am 20 Oktober 2016, 11:20:12
Das möchte ich aber weiterhin kontrollieren können da der Bee ja nur "da" und "nicht da" angeben kann.
Ich selbst habe aber zwei Staten mehr zur Auswahl.

Das habe ich auch!
Wonach richten sich denn die beiden anderen Status?

Ich habe bspw. als Homestatus morning,day,afternoon,evening,night,asleep,absent,gone und lasse diese alle automatisch über das RESIDENTS Device schalten.
Wenn der Status von RESIDENTS auf home geht, dann wird der Uhzeit entsprechend der Homestatus auf morning,day,afternoon,evening,night gesetzt.
Wenn der Status von RESIDENTS auf asleep geht, dann geht auch der Homestatus auf asleep, bei absent und gone auf jeweils absent oder gone.
Wenn der Status von RESIDENTS auf awake geht, dann wird immer der Homestatus auf morning gestellt. Nach 5 Minuten wechselt dann der Status von RESIDENTS auf home und somit wird wieder der Homestatus der Uhrzeit entsprechend eingestellt.
Per stündlichem at setzte ich den Homestatus zu jeder vollen Stunde der Uhrzeit entsprechend wenn RESIDENTS presence auf present steht.

Ich hoffe das hilft Dir weiter.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 11:39:49
Ich habe das einfach über die entsprechenden notifys geregelt:

# --- HomeStatus
define HomeStatus dummy
attr HomeStatus eventMap Zuhause Schlafen KurzWeg LangeWeg
attr HomeStatus group Heizung
attr HomeStatus icon status_automatic
attr HomeStatus room Wohnzimmer
attr HomeStatus webCmd Zuhause:Schlafen:KurzWeg:LangeWeg

define Schlafen notify HomeStatus.Schlafen { ... usw


Ich glaube nicht das mein Wissensstand das ändern kann :-D
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 11:44:54
Zitat von: accessburn am 20 Oktober 2016, 11:39:49
Ich glaube nicht das mein Wissensstand das ändern kann :-D

Ich gebe zu: Mein Homestatus ist schon recht komplex geworden.

Aber:
Dein Wissensstand kannst Du selbst beeinflussen... 8)

Bei Interesse kann ich gerne ein paar meiner Codeschnipsel zur Verfügung stellen.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 11:46:33
Das wäre sehr nett.

Blättere aktuell in http://www.reimann2.de/index.php/hausautomation/98-14-anwesenheit (http://www.reimann2.de/index.php/hausautomation/98-14-anwesenheit) und schaue mal wie das so funktioniert.
Ich bräuchte nur eine Person quasi. Aber ich bin unsicher ob ich das alles geregelt bekomme. Eigentlich eine Aktion für den Sommer, denn wenn ich die Heizungsautomatik damit lahm lege bekomm ich daheim wieder eins von Frauchen auf die Nase  ;D
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 12:27:03
Na dann mal Stück für Stück!

Hier ist erst einmal die Definition meines Homestatus:
define HouseMode dummy
attr HouseMode alias Hausstatus
attr HouseMode devStateIcon mode.night:weather_moon_phases_2@purple mode.morning:weather_sunrise@gold mode.day:weather_sun@yellow mode.afternoon:weather_summer@orange mode.evening:weather_sunset@darkorange mode.absent:user_away@orange mode.gone:user_ext_away@grey mode.dnd:control_standby@lightgreen mode.asleep:scene_sleeping_alternat@purple
attr HouseMode event-on-change-reading mode,state
attr HouseMode icon floor
attr HouseMode setList mode:morning,day,afternoon,evening,night,asleep,absent,gone,dnd
attr HouseMode webCmd mode


Hier das notify um die entsprechenden Schaltaktionen beim Ändern des Homestatus auszuführen:
define n_HouseMode notify HouseMode.* {HouseMode($EVTPART1)}

Und der Code für die 99_myUtils.pm:
sub HouseMode($)
{
  my ($mode) = @_;
  if ($mode eq "asleep")
  {
    speak("|Bell-sound-magical| Die Wohnung befindet sich nun im Nachtmodus! Gute Nacht!");
    # Alarmanlage Nachtmodus
    fhem "set AA:FILTER=state!=armnight armnight";
    # Steckdosen die Nachts nicht benötigt werden aus
    fhem "set w_nn_Steckdosen [FILTER=state!=off] off";
    # Sonos Volume runterfahren in 1 Minute
    fhem "defmod -temporary atTmp_Sonos_Flur_vol at +00:01:00 set Sonos_Flur:FILTER=transportState!=STOPPED Volume 0 1";
    # Sonos stoppen in 2 Minuten
    fhem "defmod -temporary atTmp_Sonos_Flur_off at +00:02:00 set Sonos_Flur:FILTER=transportState!=STOPPED Stop";
    # Im Winter Heizungen auf Nacht
    fhem "set Heizungen controlMode night"
      if (Value("Sommer") eq "off");
  }
  elsif ($mode =~ /^(night|morning|day|afternoon|evening)$/)
  {
    # Alarmanlage aus
    fhem "set AA:FILTER=state!=disarm disarm";
    # Alle Steckdosen an (structure)
    fhem "set w_Steckdosen [FILTER=state!=on] on";
    # Im Winter Heizungen auf Auto (templist)
    fhem "set Heizungen controlMode auto"
      if (Value("Sommer") eq "off");
    # Wenn morning und RESIDENTS awoken
    if ($1 eq "morning" && Value("rgr_Residents") eq "awoken")
    {
      my $name = ReadingsVal("rgr_Residents","lastActivityByDev","rr_Daniel");
      my $alias = AttrVal($name,"alias","Du");
      my $vol = AutoVolume();
      # Morgengruß
      fhem "sleep 5; {speak(\"|Bell-sound-magical| Guten Morgen $alias\")}";
      # Radio ein
      fhem "sleep 15; set Sonos_Flur:FILTER=transportState!=PLAYING:FILTER=Volume!=1 Volume 1; sleep 1; set Sonos_Flur:FILTER=transportState!=PLAYING StartFavourite radioeins; sleep 2; set Sonos_Flur:FILTER=transportState=PLAYING Volume $vol 1";
      # Wetterdaten und Wettervorhersage ansagen
      fhem "defmod -temporary atTmp_".$name."_wetter at +00:01:00 { speakWetterDaten(1);; speakWetterVorhersage(1) }";
      # Setze in 5 min ROOMMATE auf home wenn auf awoken
      fhem "defmod -temporary atTmp_".$name."_awoken_home at +00:05:00 set $name:FILTER=state=awoken home";
    }
  }
  elsif ($mode eq "absent")
  {
    # Im Winter Heizungen auf Nacht (bis zum nächsten Schaltzeitpunkt der templist)
    fhem "set Heizungen controlMode night"
      if (Value("Sommer") eq "off");
    # Harmony alles aus
    fhem "set HarmonyHub activity PowerOff";
    # Sonos aus
    fhem "set Sonos stopAll";
    # Wohnung aus (structure)
    fhem "sleep 3; set Wohnung off";
    # Alarmanlage auf AWAY
    fhem "sleep 5; set AA:FILTER=state!=armaway armaway";
  }
  elsif ($mode eq "gone")
  {
    # Im Winter Heizungen auf aus
    fhem "set Heizungen desired-temp off"
      if (Value("Sommer") eq "off");
  }
  elsif ($mode eq "dnd")
  {
    # Alarmanlage komplett aus
    fhem "set AA:FILTER=state!=disarm disarm";
  }
}


Hier sind noch ein paar andere Custom Funktionen verbaut! Z.B. speak() und auch AutoVolume().

Damit kannst Du evtl. schon mal spielen!
Heute Nachmittag kann ich mehr Code zur Verfügung stellen für die PRESENCE Geschichte.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: CoolTux am 20 Oktober 2016, 12:30:45
Beim presence Device bitte ein event-on-change-reading als Attribut einfügen. Dann klappt auch das Vorhaben aus dem Anfangspost
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 12:43:46
Ich hab das jetzt mal nur einfach im Notepad zusammengebastelt.
Traue mich nicht es einzufügen :-D

Solltes es relevant für dieses Beispiel sein, ich nutze kein Homeatic!

Mögen die Herren Spezialisten mal drüber schauen bitte:
define Bewohner RESIDENTS
  attr Bewohner alias Residents
  attr Bewohner devStateIcon .*home:HOME_Status.home:absent .*absent:HOME_Status.absent:home .*gone:HOME_Status.gone.png:home .*none:HOME_Status.3 .*gotosleep:HOME_Status.gotosleep:asleep .*asleep:HOME_Status.asleep:awoken .*awoken:HOME_Status.awoken:home .*:HOME_Status.1:home
  attr Bewohner event-on-change-reading state
  attr Bewohner fp_uj36eg 164,453,0,
  attr Bewohner group Home State
  attr Bewohner icon control_building_filled
  attr Bewohner room Residents
  attr Bewohner verbose 0
  attr Bewohner webCmd state 

define Tobias ROOMMATE Bewohner
  attr Tobias alias Status
  attr Tobias fp_uj36wecker 190,750,1,Tobias
  attr Tobias group Tobias
  attr Tobias icon people_sensor
  attr Tobias room Residents
  attr Tobias rr_autoGoneAfter 1
  attr Tobias rr_realname alias
  attr Tobias sortby 1
  attr Tobias verbose 0
  attr Tobias webCmd state

define MeinGtAG PRESENCE lan-bluetooth XX.XX.XX... 127.0.0.1:5333 20 120
  attr MeinGtAG group Tobias
  attr MeinGtAG icon it_wireless_dcf77
  attr MeinGtAG room Residents

define Tobias_MeinGtAG notify MeinGtAG {\
  if (Value("MeinGtAG") eq "present") {\
    fhem ("set Tobias state home")\
  } elsif ((Value("MeinGtAG") eq "absent") && (ReadingsVal("Tobias", "state", 0) ne "gone")) {\
    fhem ("set Tobias state absent")\
  }\
}
attr Tobias_MeinGtAG room Residents



Was mir fehlt ist, wie lege ich fest was die einzelnen Staten auslösen?
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Loredo am 20 Oktober 2016, 12:53:27
Ich habe gerade keine Zeit, aber ich glaube ich muss da nochmal ein wenig klarstellen, dass RESIDENTS auch nur das ist und der Homestatus was ganz anderes. Dafür war mal ein eigenes Modul "HOMESTATE" vorgesehen. Seit es DOIF gebt macht ein Modul nicht mehr viel Sinn und ich arbeite an ein paar Templates zusammen mit einem Dummy für die Darstellung des Homestate.

Erkläre ich nochmal genauer, aber generell solltet ihr Residents nicht mit einem Homestate verwurschteln :-)


Gruß

Julian
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 12:59:46
Zitat von: Loredo am 20 Oktober 2016, 12:53:27
Ich habe gerade keine Zeit, aber ich glaube ich muss da nochmal ein wenig klarstellen, dass RESIDENTS auch nur das ist und der Homestatus was ganz anderes.

Das ist schon klar!
Aber Anhand des RESIDENTS Status kann man doch den HomeState ableiten! Das ist das was ich mache.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Loredo am 20 Oktober 2016, 13:00:38
Nee kann/sollte man eben nicht. Das Haus hat auch einen eigenen Status unabhängig davon ob wer anwesend ist oder nicht.


Gruß

Julian
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 13:01:59
Okay, das verstehe ich nicht. Wenn ich mit meiner Anwesenheit diesen Homestatus nicht verwurschteln soll, wozu ist es dann gut?  ;D

Mit einigen Gegenchecks soll z.b. die Heizung hochfahren wenn ich daheim bin und runter wenn nicht. Da ich das aber auch manuell beeinflussen möchte nahm ich an das dies die einzige Möglichkeit ist.

Jetzt steh ich vor einem Chaos  :D
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Loredo am 20 Oktober 2016, 13:02:59
Ich hab grad keine Zeit das auszuführen, mache ich später.


Gruß

Julian
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 15:00:56
Zitat von: Loredo am 20 Oktober 2016, 13:00:38
Nee kann/sollte man eben nicht. Das Haus hat auch einen eigenen Status unabhängig davon ob wer anwesend ist oder nicht.


Gruß

Julian

Das ist doch alles eine Frage der persönlichen Anforderungen und Einrichtung!
Mein Homestatus wechselt bei Abwesenheit nur von absent auf gone, entsprechend des RESIDENTS Devices.
Nur bei Anwesenheit möchte ich den Homestatus anhand von awoken oder der Uhrzeit automatisch steuern.

Das ist aber offensichtlich so nicht gewünscht. Darum werde ich meinen Code dafür auch nicht hier zur Verfügung stellen.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 15:03:21
Zitat von: DeeSPe am 20 Oktober 2016, 15:00:56
Das ist aber offensichtlich so nicht gewünscht. Darum werde ich meinen Code dafür auch nicht hier zur Verfügung stellen.

So ist das nicht ganz richtig  ;D

Ich möchte das mein Bee wechselt zwischen "da" und "nicht da", den Rest wie "Urlaub" und "Schlafen" z.b. will ich selbst bestimmen können.
Für micht hört sich das aber genauso an als wenn ich mir das wünsche  ;)

Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 15:15:52
Dann hier mal der Code für deinen GTag (oder Bee).

Meine PRESENCE Devices heißen genau so wie die Bewohner/Gäste, nur mit PRESENCE_ davor.
Also das PRESENCE Device für "rr_Dan" heißt "PRESENCE_rr_Dan". Das macht die ganze Sache etwas leichter.

99_myUtils.pm:
sub DevicePresence($$)
{
  my ($dev,$event) = @_;
  my $name = (split("PRESENCE_",$dev))[1];
  my $state = ReadingsVal($name,"state","home");
  if ($event eq "present" && $state =~ /^(absent|gone|none)$/)
  {
    fhem "set $name state home";
  }
  elsif ($event eq "absent" && $state !~ /^(absent|gone|none)$/)
  {
    fhem "sleep 0.5; set $name state absent";
  }
}


Das notify für alle PRESENCE Devices:
define n_PRESENCE_user notify PRESENCE_.*:presence.* {DevicePresence($NAME,$EVTPART1)}

Damit wird nun der Status des jeweiligen ROOMMATE/GUEST Devices verändert, das RESIDENTS Device zieht automatisch mit.

Nun noch die Funktion für das RESIDENTS Device.
99_myUtils.pm:
sub ResidentsState($)
{
  my ($state) = @_;
  my $mode = DayTime();
  $mode = "morning" if ($state eq "awoken");
  $mode = $state if ($state =~ /^(absent|gone|asleep)$/);
  fhem "set HouseMode:FILTER=mode!=$mode mode $mode";
}


Und das notify für das RESIDENTS Device:
define n_rgr_Residents_state notify rgr_Residents:state:.* {ResidentsState($EVTPART1)}
attr n_rgr_Residents_state addStateEvent 1


Damit ist es nun möglich den HouseMode (Homestatus) über die PRESENCE und ROMMATE/GUEST Devices zu steuern.
Es werden hierbei auch noch TelegramBot Nachrichten verschickt. Die zum Benutzer gehörende TelegramID ist als userattr "contactPush" hinterlegt.

Falls Fragen zum Code sind, dann frag.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 15:26:13
Oha, sieht mächtig kompliziert aus.

Ich sage schonmal vielen Dank, da muss ich mich erst einmal drin vergraben. Aber eine Frage bleibt nach wie vor offen.
Wie gebe ich die verschiedenen Staten an um festzulegen was da alles passiert. Ich hatte das die ganze Zeit mit notifys gemacht.
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 15:30:02
Habe Dir noch die Funktion für DayTime() unterschlagen:
99_myUtils.pm:
sub DayTime()
{
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
  my $dt = "morning";
  $dt = "day" if ($hour >= 10 && $hour <= 13);
  $dt = "afternoon" if ($hour >= 14 && $hour <= 17);
  $dt = "evening" if ($hour >= 18 && $hour <= 22);
  $dt = "night" if ($hour == 23 || $hour <= 4);
  return $dt;
}


Zitat von: accessburn am 20 Oktober 2016, 15:26:13
Oha, sieht mächtig kompliziert aus.

Ich sage schonmal vielen Dank, da muss ich mich erst einmal drin vergraben. Aber eine Frage bleibt nach wie vor offen.
Wie gebe ich die verschiedenen Staten an um festzulegen was da alles passiert. Ich hatte das die ganze Zeit mit notifys gemacht.

Ist gar nicht so kompliziert wie es aussieht.

Das PRESENCE Device setzt eigentlich immer nur absent oder present im RESIDENTS Device.
Anhand der Uhrzeit wird dann der entsprechende HouseMode gesetzt.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 15:46:03
Okay, ich hab mir das mal zusammenkopiert und mit dem angeschaut was ich zusammen getragen habe.
Boar das macht keinen sinn. Ich kriege da nicht mein ein Bild rein um zu wissen was ich wie anpassen soll. Irgendwie hatte ich mir das etwas einfacher vorgestellt:

Deine 99_myutils
sub DevicePresence($$)
{
  my ($dev,$event) = @_;
  my $name = (split("PRESENCE_",$dev))[1];
  my $alias = AttrVal($name,"alias",$name);
  my $mid = +TB_MY_ID;
  my $id = AttrVal($name,"contactPush",$mid);
  my $pres = ReadingsVal($name,"presence","");
  if ($event eq "present")
  {
    if ($pres ne $event)
    {
      my $text = "$alias kommt gerade.";
      fhem "set TB message @".$id." Herzlichen Willkommen $alias."
        if ($id ne $mid);
      fhem "set $name location arrival; set $name home; set $name location arrival";
      fhem "defmod -temporary atTmp_".$name."_arrival at +00:05:00 set $name:FILTER=location=arrival location home";
      fhem "msg push 0 $text"
        if ($name ne "rr_Dan");
      speak("|Doorbell| $text")
        if (Value("rr_Dan") =~ /^(home|gotosleep)$/ && $name ne "rr_Dan");
    }
  }
  elsif ($event eq "absent")
  {
    if ($pres ne $event)
    {
      fhem "set TB message @".$id." Bis bald und auf Wiedersehen $alias."
        if ($id ne $mid);
      fhem "set $name $event";
      fhem "msg push 0 $alias hat die Wohnung verlassen."
        if ($name ne "rr_Dan");
    }
  }
}
sub ResidentsState($)
{
  my ($state) = @_;
  my $mode = DayTime();
  $mode = "morning" if ($state eq "awoken");
  $mode = $state if ($state =~ /^(absent|gone|asleep)$/);
  fhem "set HouseMode:FILTER=mode!=$mode mode $mode";
}
sub DayTime()
{
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
  my $dt = "morning";
  $dt = "day" if ($hour >= 10 && $hour <= 13);
  $dt = "afternoon" if ($hour >= 14 && $hour <= 17);
  $dt = "evening" if ($hour >= 18 && $hour <= 22);
  $dt = "night" if ($hour == 23 || $hour <= 4);
  return $dt;
}


deine cfg:

define n_PRESENCE_user notify PRESENCE_.*:presence.* {DevicePresence($NAME,$EVTPART1)}

define n_rgr_Residents_state notify rgr_Residents:state:.* {ResidentsState($EVTPART1)}
attr n_rgr_Residents_state addStateEvent 1


und meine cfg:
define Bewohner RESIDENTS
  attr Bewohner alias Residents
  attr Bewohner devStateIcon .*home:HOME_Status.home:absent .*absent:HOME_Status.absent:home .*gone:HOME_Status.gone.png:home .*none:HOME_Status.3 .*gotosleep:HOME_Status.gotosleep:asleep .*asleep:HOME_Status.asleep:awoken .*awoken:HOME_Status.awoken:home .*:HOME_Status.1:home
  attr Bewohner event-on-change-reading state
  attr Bewohner fp_uj36eg 164,453,0,
  attr Bewohner group Home State
  attr Bewohner icon control_building_filled
  attr Bewohner room Residents
  attr Bewohner verbose 0
  attr Bewohner webCmd state 

define Tobias ROOMMATE Bewohner
  attr Tobias alias Status
  attr Tobias fp_uj36wecker 190,750,1,Tobias
  attr Tobias group Tobias
  attr Tobias icon people_sensor
  attr Tobias room Residents
  attr Tobias rr_autoGoneAfter 1
  attr Tobias rr_realname alias
  attr Tobias sortby 1
  attr Tobias verbose 0
  attr Tobias webCmd state

define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx... 127.0.0.1:5333 20 120
  attr MeinGtAG group Tobias
  attr MeinGtAG icon it_wireless_dcf77
  attr MeinGtAG room Residents



Zumal mir die ganzen notifys fehlen:


define Zuhause notify HomeStatus.Zuhause { ...
define Schlafen notify HomeStatus.Schlafen { ...
define KurzWeg notify HomeStatus.KurzWeg { ...
define LangeWeg notify HomeStatus.LangeWeg { ...


Das sind so viele Werte und informationen   :o
Keinen Plan wie ich das zusammen soll.
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 15:50:01
Das ist das notify für den HouseMode, mehr als dieses eine benötigst Du nicht:
define n_HouseMode notify HouseMode.* {HouseMode($EVTPART1)}

In der Funktion HouseMode($) werden dann die eigentlichen Schaltungen vorgenommen.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: accessburn am 20 Oktober 2016, 15:54:00
Zitat von: DeeSPe am 20 Oktober 2016, 15:50:01
In der Funktion HouseMode($) werden dann die eigentlichen Schaltungen vorgenommen.

Na dann danke für deine mühe, jedoch versteh ich nicht mal das.
Also lasse ich es besser. Denn das krieg ich so nicht zum laufen.

Ich schaue mal ob ich das irgendwie anders gebastelt bekomme das wenn der PebbleBee das Haus verlässt wenigstens direkt auf "LangeWeg" umspringt. Mehr nicht, sonst haut es mir da in die Steuerung so rein das ich da nie wieder was ändern kann weil ich nicht weiß wie.

Etwas doof jetzt weil du dir die Mühe gemacht hast und die Zeit geopfert hast. Aber da muss ich einfach noch viel lernen...

MFG Toby
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 16:06:59
Dann mache es doch einfach Stück für Stück!
Bei mir ist der Code auch über viele Wochen hin entstanden und so gewachsen.

Jetzt erst einmal den PRESENCE Device Status einem ROOMMATE/GUEST zuweisen:

Wenn Du bereits RESIDENTS und ROOMMATE benutzt dann nenne bitte Dein verbundenes PRESENCE Device "PRESENCE_DEINROOMMATENAME".
Dann EIN notify für ALLE dieser PRESENCE Devices:
define n_PRESENCE_user notify PRESENCE_.*:presence.* {DevicePresence($NAME,$EVTPART1)}

Und der Code in der 99_myUtils.pm:
sub DevicePresence($$)
{
  my ($dev,$event) = @_;
  my $name = (split("PRESENCE_",$dev))[1];
  my $state = ReadingsVal($name,"state","home");
  if ($event eq "present" && $state =~ /^(absent|gone|none)$/)
  {
    fhem "set $name state home";
  }
  elsif ($event eq "absent" && $state !~ /^(absent|gone|none)$/)
  {
    fhem "set $name state absent";
  }
}


Damit sollte schon einmal das ROOMMATE Device auf das PRESENCE Device reagieren (absent/home).
Ich habe den Code auf ein Minimum gekürzt damit es für Dich übersichtlicher ist. Ausschmücken kannst Du auch später selber wieder.

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 20 Oktober 2016, 16:13:25
Hab den Code im vorherigen Beitag nochmals gekürzt!

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Tabularasa am 01 November 2016, 15:45:35
Hallo. Ich würde gern einen Schritt früher verstehen. Das meiste hab ich mir zusammenkopiert ohne richtig zu verstehen.
Bis jetzt habe ich RESIDENTS und ROOMMATE angelegt

define Bewohner RESIDENTS
attr Bewohner alias Residents
attr Bewohner devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home .*:user_unknown:home
attr Bewohner group Home State
attr Bewohner icon control_building_filled
attr Bewohner room Residents
attr Bewohner webCmd state


define rr_Manuel ROOMMATE Bewohner
attr rr_Manuel alias Status
attr rr_Manuel devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_Manuel group Manuel
attr rr_Manuel icon people_sensor
attr rr_Manuel room Residents
attr rr_Manuel rr_realname group
attr rr_Manuel sortby 1
attr rr_Manuel webCmd state


define rr_Lydia ROOMMATE Bewohner
attr rr_Lydia alias Status
attr rr_Lydia devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_Lydia group Lydia
attr rr_Lydia icon people_sensor
attr rr_Lydia room Residents
attr rr_Lydia rr_realname group
attr rr_Lydia sortby 1
attr rr_Lydia webCmd state


wenn ich den Status in dem Webinterface ändere wird es im FTUI auch mit geändert.
Nun möchte ich das PRESENCE damit verknüpfen und nur erstmal die Änderung sehen.
Hatte dazu folgendes angelegt
define HandyManuel PRESENCE function {checkAllFritzMACpresent("C0:EE:CC:43:82:E7")} 300 300
attr HandyManuel absenceThreshold 2
attr HandyManuel room Mobil
define FritzBox FRITZBOX
attr FritzBox allowTR064Command 1
attr FritzBox event-on-change-reading 1
attr FritzBox room System
define HandyLydia PRESENCE function {checkAllFritzMACpresent("78:C5:63:2F:5E:13")} 300 300
attr HandyLydia absenceThreshold 2
attr HandyLydia room Mobil


Was muss ich jetzt wo eingeben, dass sich der Status im FTUI automatisch verändert?
Habe irgendwie so viel gelesen und jeder macht es anders, sodass ich etwas verwirrt bin.
Im Anschluss würde ich zwar gern auch automatisiert was schalten, aber erstmal Stück für Stück vorankommen. Danke
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 01 November 2016, 15:55:20
Benenne mal Deine PRESENCE Devices so:
PRESENCE_rr_Manuel
PRESENCE_rr_Lydia

Das geht am Einfachsten per rename:
rename HandyManuel PRESENCE_rr_Manuel
rename HandyLydia PRESENCE_rr_Lydia


Diesen Code in die 99_myUitls.pm:
sub DevicePresence($$)
{
  my ($dev,$event) = @_;
  my $name = (split("PRESENCE_",$dev))[1];
  my $state = ReadingsVal($name,"state","home");
  if ($event eq "present" && $state =~ /^(absent|gone|none)$/)
  {
    fhem "set $name state home";
  }
  elsif ($event eq "absent" && $state !~ /^(absent|gone|none)$/)
  {
    fhem "set $name state absent";
  }
}


Und dann kannst Du das notify genau so anlegen:
define n_PRESENCE_user notify PRESENCE_.*:presence.* {DevicePresence($NAME,$EVTPART1)}

Somit sollten nun Deine RESIDENTS dem Status des entsprechenden PRESENCE Devices folgen.

Gruß
Dan

EDIT: Habe den Code der 99_myUtils.pm noch ein Wenig angepasst damit sich der Status wirklich nur bei Veränderung ändert.
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Tabularasa am 01 November 2016, 22:16:57
Danke erstmal. Aber so ganz klappt es glaube noch nicht. Im Anhang sind die Stati nicht gleich. Der Presence Status ist aktuell, da es ja von der Fritzbox empfängt, aber die anderen ändern sich nicht. Oder müssen die sich garnicht ändern? Weil im FTUI wird der richtige Status angezeigt.
Da ich erst so seit 2 Wochen überhaupt mich mit FHEM beschäftige und auch 0 Grundkenntnisse vorher hatte, würde ich euch bitten mir zu sagen was ihr braucht um mir eventuell helfen zu können. Danke

In den Readings von Residents und Roommate steht als Zeit heute nachmittag drin. Müsste das nicht aktueller sein?
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 01 November 2016, 23:15:45
Ich habe oben den Code der sub DevicePresence noch einmal angepasst.
Warum auch immer klappt das mit dem FILTER nicht. Habe es bei mir auch ohne drin.
So sollte es gehen!

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Tabularasa am 02 November 2016, 09:22:49
Bin grad an der Arbeit und habe per VPN mal zuhause geschaut. Jetzt scheinen die Stati richtig zu sein ohne das ich was am Code geändert habe. Also das mit dem FILTER ist noch drin. Ich hatte gestern gleich nach dem anlegen das event-on-change reading Attribut gesetzt bei Residents, Roommate und Presence weil im event monitor immer Einträge erzeugt wurden jede Minute. Ich wollte eigentlich damit die SD Karte nicht so belasten, oder wird sie dadurch garnicht belastet? Jedenfalls hatte ich dann gestern abend die Attribute wieder gelöscht nachdem es nicht ging. Kann das damit was zu tun haben da es ja jetzt funktioniert?
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: DeeSPe am 02 November 2016, 09:31:01
Klar, wenn die Attribute falsch gesetzt sind kann das was damit zu tun haben.
Hatte es gestern selbst noch einmal mit dem FILTER getestet und bei mir ging es nicht.
Ohne FILTER lief es wieder einwandfrei.

Ich habe bei mir Folgendes gesetzt und es funktioniert damit (setzt es bei allen ROOMMATE/GUEST Devices):
attr TYPE=ROOMMATE|GUEST event-on-change-reading location,mood,presence,state

Gruß
Dan
Titel: Antw:Anwesenheit > Homestatus > Manuelle Änderung
Beitrag von: Tabularasa am 03 November 2016, 17:53:26
Hallo. Also passt soweit mit Filter und deinem Code vom letzten Post. Ich hatte das event-on-change-reading ohne Wert im Webinterface eingegeben. Also stand da eine 1 dahinter. Deswegen hatte es wohl auch nicht geklappt.