Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr

Begonnen von DeeSPe, 07 Januar 2017, 15:59:43

Vorheriges Thema - Nächstes Thema

DeeSPe

Zitat von: binford6000 am 22 Februar 2017, 16:59:54
Mein konkreter Verwendungszweck wäre die zentrale Lichtsteuerung auf Basis von Anwesenheit und Helligkeit.
Aktuell habe ich das in einem DIOF mit LIGHTSCENE und 6 HUEDEVICEs stecken. Und da hier ständig geschaut wird, ob es noch hell genug ist bzw. ob sich die Anwesenheit geändert hat, kann ich es imho momentan leider nicht mit in HOMEMODE packen...

Oder vielleicht hast Du ja noch einen Tipp für mich wie es doch jetzt schon geht...?  ;)

VG Sebastian

Erklär mal bitte was das DOIF macht bzw. was bedeutet "auf Basis von Anwesenheit und Helligkeit"?
Wie und durch was wird denn Dein DOIF getriggert?

Ich kann erst einmal nur das einbauen was ich selbst verwende.
Bei mir wird (wie auch im Beispielcode zu sehen), das Licht anhand von BWMs gesteuert. Je nach vorhandenem Rest-Umgebungslicht wird eine hellere oder dunklere Szene in LightScene gesetzt. Je dunkler es wird, um so dunkler ist auch meine Beleuchtung.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

binford6000

ZitatErklär mal bitte was das DOIF macht bzw. was bedeutet "auf Basis von Anwesenheit und Helligkeit"?
Wie und durch was wird denn Dein DOIF getriggert?

Hi Dan,

hier ist das DOIF:


(["$SELF:switch: anwesend"] or ([Wohnung:presence] eq "present" and [PhilipsTV.PRE] eq "absent"
and [rr_Sebastian:state] ne "asleep" and [Daemmerung:light] <= "4"))
(set Standard.LS scene anwesend, {Log(3, "AutoLicht: Lichtschalter auf anwesend geschaltet.")})

DOELSEIF (["$SELF:switch: anwesend_alle"] or ([Wohnung:presence] eq "present" and [PhilipsTV.PRE] eq "present"
and [rr_Sebastian:state] ne "asleep" and [Daemmerung:light] <= "4"))
(set Standard.LS scene anwesend_alle, {Log(3, "AutoLicht: Lichtschalter auf anwesend_alle geschaltet.")})

DOELSEIF (["$SELF:switch: abwesend"] or [Daemmerung:light] >= "5" or [Wohnung:presence] eq "absent"
or [rr_Sebastian:state] eq "asleep")
(set Standard.LS scene abwesend, {Log(3, "AutoLicht: Lichtschalter auf abwesend geschaltet.")})


"Wohnung" ist dabei das HOMEMODE-Device, "Daemmerung" ist das TWILIGHT-Device
und "Standard.LS" das LIGHTSCENE-Device.

HomeCMDmode-gotosleep-rr_Sebastian,
HomeCMDmode-awoken-rr_Sebastian 
HomeCMDmode-asleep-rr_Sebastian


habe ich bereits in Verwendung, da diese Zeitpunkte ja schön abgefragt werden können.

VG Sebastian


DeeSPe

Das Modul im ersten Beitrag habe ich soeben aktualisiert und somit ein paar Fehler beseitigt sowie minimale Änderungen vorgenommen.

Changelog:

  • einige Fehlerkorrekturen
  • HomeSensorsContactValues/HomeValues korrigiert (Dank an Schlimbo)
  • RegEx für HomeSensorsContactValues/HomeValues wird nun exakt ausgewertet
  • HomeAutoArrival funktioniert nun auch wenn man nicht die automatische Presence Verknüpfung mit "HomeAutoPresence 1" aktiviert hat (Dank an Schlimbo)
  • Berichtigung des Readings lastGotoleepByResident nach lastGotosleepByResident (Dank an Schlimbo)
  • seit dem FHEM 5.8 Update müssen auch die Platzhalter die eine Zahl darstellen im Perl Code in Anführungszeichen gesetzt werden (früher ging: %ICE%, nun muss: "%ICE%")

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

binford6000

Zitatseit dem FHEM 5.8 Update müssen auch die Platzhalter die eine Zahl darstellen im Perl Code in Anführungszeichen gesetzt werden (früher ging: %ICE%, nun muss: "%ICE%")

Da bin ich auch schon drüber gestolpert  - ist bereits gefixt  ;)
VG Sebastian

DeeSPe

Zitat von: binford6000 am 22 Februar 2017, 22:10:15
Hi Dan,

hier ist das DOIF:


(["$SELF:switch: anwesend"] or ([Wohnung:presence] eq "present" and [PhilipsTV.PRE] eq "absent"
and [rr_Sebastian:state] ne "asleep" and [Daemmerung:light] <= "4"))
(set Standard.LS scene anwesend, {Log(3, "AutoLicht: Lichtschalter auf anwesend geschaltet.")})

DOELSEIF (["$SELF:switch: anwesend_alle"] or ([Wohnung:presence] eq "present" and [PhilipsTV.PRE] eq "present"
and [rr_Sebastian:state] ne "asleep" and [Daemmerung:light] <= "4"))
(set Standard.LS scene anwesend_alle, {Log(3, "AutoLicht: Lichtschalter auf anwesend_alle geschaltet.")})

DOELSEIF (["$SELF:switch: abwesend"] or [Daemmerung:light] >= "5" or [Wohnung:presence] eq "absent"
or [rr_Sebastian:state] eq "asleep")
(set Standard.LS scene abwesend, {Log(3, "AutoLicht: Lichtschalter auf abwesend geschaltet.")})


"Wohnung" ist dabei das HOMEMODE-Device, "Daemmerung" ist das TWILIGHT-Device
und "Standard.LS" das LIGHTSCENE-Device.

HomeCMDmode-gotosleep-rr_Sebastian,
HomeCMDmode-awoken-rr_Sebastian 
HomeCMDmode-asleep-rr_Sebastian


habe ich bereits in Verwendung, da diese Zeitpunkte ja schön abgefragt werden können.

VG Sebastian

Moin Sebastian,

ich wüsste nicht wie ich diese von Dir genannten Abhängigkeiten im HOMEMODE Device abbilden sollte.
HomeCMD Attribute kann ich nur anlegen für Geräte die auch tatsächlich von HOMEMODE überwacht bzw. kontrolliert werden.
Das ist m.E. dann doch zu speziell und auch nicht als "allgemein" einzustufen.
Falls Du eine Idee dazu haben solltest, lass es mich wissen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Christian Uhlmann

Hallo,

habe das neuste Modul (von heute) installiert aber meine Frage bezieht sich auch schon auf die Versionen davor.

1. Einige meiner Bewegungsmelder und auch Kontaktmelder haben keine Sabotage Kontakt, ist es möglich das irgendwie dem Modul mitzuteilen?
2. Bei mir wird das Readings lastMotion nicht erzeugt, obwohl die Sensoren dies liefern müssten, lastMotionClosed wird erzeugt :(
List vom Bewegungsmelder:

Internals:
   CFGFN
   CHANGED
   DEF        12
   IODev      SYS.gw.AE.Versorgungsraum
   NAME       EG.fl.BMK.Flur_Motion
   NR         665
   PIN        12
   STATE      off
   TYPE       FRM_IN
   Helper:
     Dblog:
       Logstate:
         Sys.dblog:
           TIME       1487845429.34367
           VALUE      noMotion
       Motion:
         Sys.dblog:
           TIME       1487845399.33057
           VALUE      off
       Reading:
         Sys.dblog:
           TIME       1487845399.33057
           VALUE      off
       State:
         Sys.dblog:
           TIME       1487845429.34367
           VALUE      noMotion
   Readings:
     2017-02-23 11:24:38   logstate        noMotion
     2017-02-23 11:24:38   motion          off
     2017-02-23 11:24:38   reading         off
     2017-02-23 11:23:49   state           noMotion

state steht auf motion, wenn Bewegung erkannt wurde.
Der Bewegungsmelder steht im Homemode Device auch unter SENSORSMOTION
Die HomeSensorsMotion attribute sind wie folgt:


HomeSensorsMotionReadings state sabotageError
HomeSensorsMotionValues motion|open|on


Hat jemand eine Idee was da falsch sein könnte oder ist da noch ein Bug im Modul?


Grüße
Christian


Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

DeeSPe

Zitat von: Christian Uhlmann am 23 Februar 2017, 11:29:29
Hallo,

habe das neuste Modul (von heute) installiert aber meine Frage bezieht sich auch schon auf die Versionen davor.

1. Einige meiner Bewegungsmelder und auch Kontaktmelder haben keine Sabotage Kontakt, ist es möglich das irgendwie dem Modul mitzuteilen?
2. Bei mir wird das Readings lastMotion nicht erzeugt, obwohl die Sensoren dies liefern müssten, lastMotionClosed wird erzeugt :(
List vom Bewegungsmelder:

Internals:
   CFGFN
   CHANGED
   DEF        12
   IODev      SYS.gw.AE.Versorgungsraum
   NAME       EG.fl.BMK.Flur_Motion
   NR         665
   PIN        12
   STATE      off
   TYPE       FRM_IN
   Helper:
     Dblog:
       Logstate:
         Sys.dblog:
           TIME       1487845429.34367
           VALUE      noMotion
       Motion:
         Sys.dblog:
           TIME       1487845399.33057
           VALUE      off
       Reading:
         Sys.dblog:
           TIME       1487845399.33057
           VALUE      off
       State:
         Sys.dblog:
           TIME       1487845429.34367
           VALUE      noMotion
   Readings:
     2017-02-23 11:24:38   logstate        noMotion
     2017-02-23 11:24:38   motion          off
     2017-02-23 11:24:38   reading         off
     2017-02-23 11:23:49   state           noMotion

state steht auf motion, wenn Bewegung erkannt wurde.
Der Bewegungsmelder steht im Homemode Device auch unter SENSORSMOTION
Die HomeSensorsMotion attribute sind wie folgt:


HomeSensorsMotionReadings state sabotageError
HomeSensorsMotionValues motion|open|on


Hat jemand eine Idee was da falsch sein könnte oder ist da noch ein Bug im Modul?


Grüße
Christian

Wenn die Sensoren kein Reading für Sabotage haben, dann wird es auch nicht ausgewertet. ;)
Stell einfach in HomeSensorsMotionReadings die Readings ein, die die meisten Sensoren haben. Bei den verbleibenden kann Du dann im Device mit HomeReadings gegensteuern da dieses dann Vorrang hat.
Probier doch erst einmal nur mit:

HomeSensorsMotionReadings state
HomeSensorsMotionValues motion


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Christian Uhlmann

Hi,

ein
attr HomeMode HomeSensorsMotionReadings state
führt zu diesem Fehler
Invalid value state for attribute HomeSensorsMotionReadings. You have to provide at least 2 space separated readings, p.e. state sabotageError

Grüße
Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

Christian Uhlmann

Hi nochmal,

wen ich ehrlich bin, dann setze ich es einfach auf
attr HomeMode HomeSensorsMotionReadings state sabotageError
und die Antwort auf Frage 1. ist, einfach was setzen, es wird dann ignoriert wenn es das Reading nicht gibt.

Aber die Frage 2 bzgl. dem Reading lastMotion beschäftigt mich schon gerade.
Vor allem, bei Bewegung wird das Reading motionsInside auch passend gefüllt.
Warum lastMotion nicht lastMotionClosed aber schon.


Grüße

Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

DeeSPe

Zitat von: Christian Uhlmann am 23 Februar 2017, 11:38:24
Hi,

ein
attr HomeMode HomeSensorsMotionReadings state
führt zu diesem Fehler
Invalid value state for attribute HomeSensorsMotionReadings. You have to provide at least 2 space separated readings, p.e. state sabotageError

Grüße
Christian

Ach ja, das wird ja geprüft! 8)
Ja, dann auf irgend ein Reading setzen dass es nicht gibt (oder eben so lassen).

Zitat von: Christian Uhlmann am 23 Februar 2017, 11:47:34
Aber die Frage 2 bzgl. dem Reading lastMotion beschäftigt mich schon gerade.
Vor allem, bei Bewegung wird das Reading motionsInside auch passend gefüllt.
Warum lastMotion nicht lastMotionClosed aber schon.

Das werde ich mir heute Abend noch einmal in Ruhe ansehen, bin aber der Meinung dass das bei mir zu Hause funktioniert!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Zitat von: Christian Uhlmann am 23 Februar 2017, 11:47:34
Hi nochmal,

wen ich ehrlich bin, dann setze ich es einfach auf
attr HomeMode HomeSensorsMotionReadings state sabotageError
und die Antwort auf Frage 1. ist, einfach was setzen, es wird dann ignoriert wenn es das Reading nicht gibt.

Aber die Frage 2 bzgl. dem Reading lastMotion beschäftigt mich schon gerade.
Vor allem, bei Bewegung wird das Reading motionsInside auch passend gefüllt.
Warum lastMotion nicht lastMotionClosed aber schon.


Grüße

Christian

Habe das gerade mal getestet mit einem dummy und bei mir funktioniert das mit Deinen Werten wie gewünscht!

dummy:
defmod m1 dummy
attr m1 userattr HomeModeAlarmActive HomeReadings HomeSensorLocation:inside,outside HomeValues
attr m1 HomeModeAlarmActive armaway
attr m1 HomeSensorLocation inside
attr m1 room TEST
attr m1 setList Motion noMotion


HOMEMODE:

attr HM HomeSensorsMotion m1
attr HM HomeSensorsMotionValues Motion


Log:

2017-02-23 14:54:38 HOMEMODE HM lastMotion: m1
2017-02-23 14:54:38 HOMEMODE HM alarmTriggered_ct: 1
2017-02-23 14:54:38 HOMEMODE HM alarmTriggered: m1
2017.02.23 14:54:38 1 : DEBUG>!!! ALARM !!! m1 ist ausgelöst!2017-02-23 14:54:38 HOMEMODE HM motionsSensors: m1
2017-02-23 14:54:38 HOMEMODE HM motionsSensors_ct: 1
2017-02-23 14:54:38 HOMEMODE HM motionsSensors_hr: m1
2017-02-23 14:54:38 HOMEMODE HM motionsInside: m1
2017-02-23 14:54:38 HOMEMODE HM motionsInside_ct: 1
2017-02-23 14:54:38 HOMEMODE HM motionsInside_hr: m1
2017-02-23 14:54:38 dummy m1 state: Motion
2017-02-23 14:55:32 HOMEMODE HM lastMotionClosed: m1
2017-02-23 14:55:32 HOMEMODE HM alarmTriggered_ct: 0
2017-02-23 14:55:32 HOMEMODE HM alarmTriggered:
2017.02.23 14:55:32 1 : DEBUG>ENTWARNUNG: Der Alarm wurde beendet!2017-02-23 14:55:32 HOMEMODE HM motionsSensors:
2017-02-23 14:55:32 HOMEMODE HM motionsSensors_ct: 0
2017-02-23 14:55:32 HOMEMODE HM motionsSensors_hr:
2017-02-23 14:55:32 HOMEMODE HM motionsInside:
2017-02-23 14:55:32 HOMEMODE HM motionsInside_ct: 0
2017-02-23 14:55:32 HOMEMODE HM motionsInside_hr:
2017-02-23 14:55:32 dummy m1 state: noMotion


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

binford6000

ZitatFalls Du eine Idee dazu haben solltest, lass es mich wissen.

In Anlehnung an das Attribut "HomeCMDmotion" und Deinen Beispielcode könnte man vielleicht
anstatt auf die Events der Bewegungssensoren auf die Events der PRESENCE-Devices reagieren?

Das Reading "lastAbsentByPresenceDevice" wird ja durch die jeweiligen Events aktualisiert.
Das Intervall ergibt sich dann automatisch durch das entsprechende PRESENCE-Device.
Ein Attribut für presence und absence und dann könnte man sozusagen
im Takt der PRESENCE- und ABSENCE-Events Code ausführen. Wie zB mein Licht-DOIF:

{
  my $tv = ReadingsVal("PhilipsTV.PRE","state","");
  my $res = ReadingsVal("rr_Sebastian","state","");
  if ("%PRESENT%" eq "home" && $tv eq "absent" && $res ne "asleep" && "%LIGHT%" <= "4") {
    fhem "set Standard.LS scene anwesend"; Log(3, "Wohnung: Szene "anwesend" eingestellt.");
  }
  elsif ("%PRESENT%" eq "home" && $tv eq "present" && $res ne "asleep" && "%LIGHT%" <= "4"){
    fhem "set Standard.LS scene anwesend_alle"; Log(3, "Wohnung: Szene "anwesend_alle" eingestellt.");
  }
  elsif ("%PRESENT%" eq "absent" || $res eq "asleep" || "%LIGHT%" >= "5"){
    fhem "set Standard.LS scene abwesend"; Log(3, "Wohnung: Szene "abwesend" eingestellt.");
  }
}


Das wäre meine Idee dazu. Ich kann aber auch verstehen, wenn Du Dein Modul so allgemein
wie möglich halten möchtest! ;)
Frei nach Deichkind: "Die Welt keeps on turning, Alter. Universe keeps on spinning..."  8)

VG Sebastian

Spezialtrick

Zitat von: DeeSPe am 19 Februar 2017, 13:14:01
Ja, ich vertraue voll und ganz der Automatik!
Das hat bei mir bisher immer zu 100% geklappt.

Ich habe nur 2x at konfiguriert damit in den Zeiten wo mein (noch nicht WLAN steuerbarer) BotVac fährt, die Alarmanlage bei Bedarf von armaway auf armhome geschaltet wird, damit die BWMs keinen Alarm melden. 8)

Übrigens habe ich eine ähnliche Anforderung gerade bei meinen Eltern, die möchte ich mit einer HomeMatic Schlüsselbund-Fernbedienung ausstatten damit sie auf den HOMEMODE Einwirkung haben. Dazu habe ich mir aber überlegt dass ich die 4 Tasten benutze um nur ihren ROOMMATE Status zu ändern (home|away|gotosleep|panik), der Rest macht dann wieder die Automatik. Panik soll dann sofort die Sirene auslösen...

Gruß
Dan

In Ordnung dann lasse ich mich auch mal auf die automatischen Schaltung der Anlage ein.  :P Habe nun zur Sicherheit fürs erste eine HomeMatic HM-RC-Sec4-2 versteckt hinterlegt, falls es mal nicht funktioniert.

Eine Frage hätte ich aber noch. Wie betrittst du dein Heim, ohne den Alarm auszulösen. Hast du eine Verzögerung für die Haustür eingestellt? Presence reagiert ja nicht so schnell.  ???
FHEM - Debmatic - Zigbee2MQTT - Homekit

DeeSPe

Zitat von: Spezialtrick am 24 Februar 2017, 20:57:38
Eine Frage hätte ich aber noch. Wie betrittst du dein Heim, ohne den Alarm auszulösen. Hast du eine Verzögerung für die Haustür eingestellt? Presence reagiert ja nicht so schnell.  ???

Meine G-Tags werden meist schon beim Treppe hoch kommen registriert.
Das Piepen des Entschärfen höre ich vor der Tür!
Manchmal muss ich auch einen kurzen Moment vor der Tür warten.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Spezialtrick

Ok. Welche Zeiten hast du in Presence eingestellt?

Grüße!
FHEM - Debmatic - Zigbee2MQTT - Homekit