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

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

Vorheriges Thema - Nächstes Thema

DeeSPe

Wie würde denn ein "sinnvoller" Namensvorschlag aussehen?
Ich finde den Namen schon ganz treffend und aussagekräftig, denn es geht hauptsächlich um das Zuhause (Home) und dessen verschiedene Modus (Mode).
Lasse mich aber gerne eines besseren belehren.

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

Esjay

Zitat von: DeeSPe am 14 Mai 2017, 22:14:45
Hallo,

Dein Problem resultiert m.E. aus Deiner Umsetzung und nicht aus fehlenden Möglichkeiten des Moduls.
Hast Du HomeAutoPresence und HomeAutoArrival im Einsatz? Das würde sich dafür perfekt eignen.
Wie werden denn die Aktionen vom Keypad an FHEM gemeldet/umgesetzt? Sicherlich per notify/DOIF!?
Ich würde empfehlen statt der dritten Aktion, das RESIDENTS Device einfach auf home zu setzen, jeweils beide ROOMMATE(s) auf home zu setzen. Danach hast Du dann im Platzhalter %ARRIVERS% für die Zeit aus HomeAutoArrival beide Aliases der ROOMMATE(s)/GUEST(s).

Gruß
Dan

Hi Dan,

ich habe jetzt mal HomeAutoArrival auf 10 gesetzt, und wie du gesagt hast anstatt das RESIDENT auf Home zu setzen den Doif in die Richtung geändert.

([ZWave_ENTRY_CONTROL_4:"^alarm:.AccessControl:.Keypad.Unlock.Operation,.arg.0105$"]) (set rr_xxxx state home)(set rr_xxxxx state home)DOELSEIF([ZWave_ENTRY_CONTROL_4:"^alarm:.AccessControl:.Keypad.Lock.Operation,.arg.0105$"])(set rr_xxxx state absent)(set rr_xxxxx state absent)


Allerdings bleibt %ARRIVERS% leer. Vom Verständnis her müsste bei Keypad.Unlock.Operation,.arg.0105 doch jetzt in %ARRIVERS% beide Namen stehen.

Grüße

DeeSPe

Zitat von: Esjay am 22 Mai 2017, 21:17:28
Hi Dan,

ich habe jetzt mal HomeAutoArrival auf 10 gesetzt, und wie du gesagt hast anstatt das RESIDENT auf Home zu setzen den Doif in die Richtung geändert.

([ZWave_ENTRY_CONTROL_4:"^alarm:.AccessControl:.Keypad.Unlock.Operation,.arg.0105$"]) (set rr_xxxx state home)(set rr_xxxxx state home)DOELSEIF([ZWave_ENTRY_CONTROL_4:"^alarm:.AccessControl:.Keypad.Lock.Operation,.arg.0105$"])(set rr_xxxx state absent)(set rr_xxxxx state absent)


Allerdings bleibt %ARRIVERS% leer. Vom Verständnis her müsste bei Keypad.Unlock.Operation,.arg.0105 doch jetzt in %ARRIVERS% beide Namen stehen.

Grüße

Als Erstes: ich habe keinerlei Ahnung von DOIF.

Ich habe das gerade in meinem Testsystem ausprobiert mit "set rr_Brina state home". Als Ausgabe im Event-Monitor kommt dann:
2017.05.22 21:26:37 2 : ROOMMATE set rr_Brina home
2017-05-22 21:26:37 at atTmp_set_home_HM Next: 21:27:37
2017-05-22 21:26:37 Global global DEFINED atTmp_set_home_HM
2017-05-22 21:26:37 HOMEMODE HM presence: present
2017-05-22 21:26:37 HOMEMODE HM prevLocation: underway
2017-05-22 21:26:37 HOMEMODE HM location: arrival
2017-05-22 21:26:37 HOMEMODE HM prevModeAlarm: armaway
2017-05-22 21:26:37 HOMEMODE HM modeAlarm: disarm
2017-05-22 21:26:37 HOMEMODE HM alarmTriggered_ct: 0
2017-05-22 21:26:37 HOMEMODE HM alarmTriggered:
2017-05-22 21:26:37 HOMEMODE HM alarmTriggered_hr:
2017.05.22 21:26:37 1 : DEBUG>msg audio 1 Die Alarmanlage ist nun ausgeschaltet Meine Herrin!
2017-05-22 21:26:37 HOMEMODE HM mode: Abend
2017-05-22 21:26:37 HOMEMODE HM prevMode: absent
2017-05-22 21:26:37 HOMEMODE HM Abend
2017-05-22 21:26:37 RESIDENTS rgr_Residents residentsTotalPresentDevs: rr_Brina
2017-05-22 21:26:37 RESIDENTS rgr_Residents home
2017-05-22 21:26:37 RESIDENTS rgr_Residents presence: present
2017-05-22 21:26:37 at atTmp_location_home_rr_Brina_HM Next: 21:27:37
2017-05-22 21:26:37 Global global DEFINED atTmp_location_home_rr_Brina_HM
2017-05-22 21:26:37 HOMEMODE HM lastPresentByResident: rr_Brina
2017-05-22 21:26:37 HOMEMODE HM lastActivityByResident: rr_Brina
2017-05-22 21:26:37 HOMEMODE HM prevActivityByResident: rr_Brina
2017-05-22 21:26:37 ROOMMATE rr_Brina home
2017-05-22 21:26:37 ROOMMATE rr_Brina presence: present
2017-05-22 21:26:37 ROOMMATE rr_Brina location: home
2017.05.22 21:26:37 2 : ROOMMATE set rr_Brina location arrival
2017-05-22 21:26:37 ROOMMATE rr_Brina location: arrival
2017.05.22 21:26:38 1 : DEBUG>msg @rr_Brina Willkommen und guten Abend Meine Herrin!
2017.05.22 21:26:38 1 : DEBUG>Hallo Meine Herrin
2017-05-22 21:27:37 HOMEMODE HM prevLocation: arrival
2017-05-22 21:27:37 HOMEMODE HM location: home
2017.05.22 21:27:37 2 : ROOMMATE set rr_Brina location home
2017-05-22 21:27:37 ROOMMATE rr_Brina location: home


Es wurde alles wie erwartet erstellt und abgearbeitet.

Was passiert denn im Reading "location" des ROOMMATE/GUEST wenn "set rr_xxxx state home" ausgeführt wird?
Das sollte bei "HomeAutoArrival 10" auf "arrival" springen.

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

Esjay

Ist soweit korrekt.
Die Locations werden auf "arrival" gesetzt. Habe jetzt mal meinen einzelnen Roommate per Hand von home auf absent gesetzt und zurück. Selbes Bild. Location spring auf "arrival" allerdings bleibt %ARRIVERS% leer.

DeeSPe

Und in welchem HomeCMD Attribut verwendest Du %ARRIVERS% ?

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

Esjay

Benutze es wie folgt.
HomeCMDmodeAlarm-disarm
set Alarmanlage off;set Tablet_Flur ttsmsg Alarmanlage abgeschaltet Herzlich Wilkommen zuhause %ARRIVERS%;set TelegramBot msg Alarmanlage abgeschaltet



ComputerZOO

#486
Ähm, meine ich das nur, oder fehlen da zu Anfang und Ende die geschweiften Klammern?

Bei mir sehen die auszuführenden CMDs so aus:
{
my $STATIONURL = radio2url(ReadingsVal("d.gotosleep","radioStation",""));
fhem "set bz.lightscene scene Aufstehen";
fhem "set bz.squeezebox volume 10";
fhem "set bz.squeezebox on";
fhem "set bz.squeezebox playlist play $STATIONURL";
Log 3, "-- HomeCMDlocation: Dusche --";
}

Esjay

Zitat von: ComputerZOO am 22 Mai 2017, 22:23:34
Ähm, meine ich das nur, oder fehlen da zu Anfang und Ende die geschweiften Klammern?

Bei mir sehen die auszuführenden CMDs so aus:
{
my $STATIONURL = radio2url(ReadingsVal("d.gotosleep","radioStation",""));
fhem "set bz.lightscene scene Aufstehen";
fhem "set bz.squeezebox volume 10";
fhem "set bz.squeezebox on";
fhem "set bz.squeezebox playlist play $STATIONURL";
Log 3, "-- HomeCMDlocation: Dusche --";
}


Danke für deinen Einwand, aber wenn ich anstatt %ARRIVERS% , %ALIAS% nehme, bekomme ich den Namen durchgesagt. Ansonsten funktionieren alle meine CMD`s ebenfalls ohne die Klammern.

Gruß

DeeSPe

Zitat von: ComputerZOO am 22 Mai 2017, 22:23:34
Ähm, meine ich das nur, oder fehlen da zu Anfang und Ende die geschweiften Klammern?

Bei mir sehen die auszuführenden CMDs so aus:
{
my $STATIONURL = radio2url(ReadingsVal("d.gotosleep","radioStation",""));
fhem "set bz.lightscene scene Aufstehen";
fhem "set bz.squeezebox volume 10";
fhem "set bz.squeezebox on";
fhem "set bz.squeezebox playlist play $STATIONURL";
Log 3, "-- HomeCMDlocation: Dusche --";
}


Nein, er verwendet keinen Perl Code.
Zitat von: Esjay am 22 Mai 2017, 21:52:23
Benutze es wie folgt.
HomeCMDmodeAlarm-disarm
set Alarmanlage off;set Tablet_Flur ttsmsg Alarmanlage abgeschaltet Herzlich Wilkommen zuhause %ARRIVERS%;set TelegramBot msg Alarmanlage abgeschaltet




Schau es Dir doch einfach selbst mal im Event-Monitor an:
set rr_Dan,rr_Brina state home

2017.05.22 22:23:58 2 : ROOMMATE set rr_Dan home
2017-05-22 22:23:58 at atTmp_set_home_HM Next: 22:24:58
2017-05-22 22:23:58 Global global DEFINED atTmp_set_home_HM
2017-05-22 22:23:58 HOMEMODE HM presence: present
2017-05-22 22:23:58 HOMEMODE HM prevLocation: underway
2017-05-22 22:23:58 HOMEMODE HM location: arrival
2017-05-22 22:23:58 HOMEMODE HM prevModeAlarm: armaway
2017-05-22 22:23:58 HOMEMODE HM modeAlarm: disarm
2017-05-22 22:23:58 HOMEMODE HM alarmTriggered_ct: 0
2017-05-22 22:23:58 HOMEMODE HM alarmTriggered:
2017-05-22 22:23:58 HOMEMODE HM alarmTriggered_hr:
2017.05.22 22:23:58 1 : DEBUG>msg audio 1 Die Alarmanlage ist nun ausgeschaltet Meine Herrin!
2017.05.22 22:23:58 1 : DEBUG>set Tablet_Flur ttsmsg Alarmanlage abgeschaltet Herzlich Wilkommen zuhause
2017-05-22 22:23:58 HOMEMODE HM mode: Abend
2017-05-22 22:23:58 HOMEMODE HM prevMode: absent
2017-05-22 22:23:58 HOMEMODE HM Abend
2017-05-22 22:23:58 RESIDENTS rgr_Residents residentsTotalPresentDevs: rr_Dan
2017-05-22 22:23:58 RESIDENTS rgr_Residents home
2017-05-22 22:23:58 RESIDENTS rgr_Residents presence: present
2017-05-22 22:23:58 at atTmp_location_home_rr_Dan_HM Next: 22:24:58
2017-05-22 22:23:58 Global global DEFINED atTmp_location_home_rr_Dan_HM
2017-05-22 22:23:58 HOMEMODE HM lastPresentByResident: rr_Dan
2017-05-22 22:23:58 HOMEMODE HM lastActivityByResident: rr_Dan
2017-05-22 22:23:58 HOMEMODE HM prevActivityByResident: rr_Brina
2017-05-22 22:23:58 ROOMMATE rr_Dan home
2017-05-22 22:23:58 ROOMMATE rr_Dan presence: present
2017-05-22 22:23:58 ROOMMATE rr_Dan location: home
2017.05.22 22:23:58 2 : ROOMMATE set rr_Brina home
2017-05-22 22:23:58 RESIDENTS rgr_Residents residentsTotalPresentDevs: rr_Brina,rr_Dan
2017-05-22 22:23:58 at atTmp_location_home_rr_Brina_HM Next: 22:24:58
2017-05-22 22:23:58 Global global DEFINED atTmp_location_home_rr_Brina_HM
2017-05-22 22:23:58 HOMEMODE HM lastPresentByResident: rr_Brina
2017-05-22 22:23:58 HOMEMODE HM lastActivityByResident: rr_Brina
2017-05-22 22:23:58 HOMEMODE HM prevActivityByResident: rr_Dan
2017-05-22 22:23:58 ROOMMATE rr_Brina home
2017-05-22 22:23:58 ROOMMATE rr_Brina presence: present
2017-05-22 22:23:58 ROOMMATE rr_Brina location: home
2017.05.22 22:23:58 2 : ROOMMATE set rr_Dan location arrival
2017-05-22 22:23:59 ROOMMATE rr_Dan location: arrival
2017.05.22 22:23:59 2 : ROOMMATE set rr_Brina location arrival
2017-05-22 22:23:59 ROOMMATE rr_Brina location: arrival


"HomeCMDmodeAlarm-disarm" wird sofort ausgeführt wenn ein RESIDENT anwesend ist.
Die jeweiligen RESIDENTS werden aber erst ein paar Millisekunden später auf "location arrival" gesetzt.
Kurz: "HomeCMDmodeAlarm-disarm" ist einfach zu früh für %ARRIVERS%, macht an dieser Stelle m.E. auch keinen Sinn. Denn begrüßt werden sollte doch erst wenn sich die Tür öffnet bzw. wieder schließt.
Bei mir ist es so dass der/die erste der/die kommt entsprechend informiert wird (msg push/audio) und beim Schließen der Eingangstür die Begrüßung erfolgt. So kann ich sicher stellen dass die Begrüßung erfolgt wenn wirklich jemand herein gekommen ist, was nützt mir die Begrüßung vor der Tür?

Bin aber wie immer für sinnvolle Verbesserungsvorschläge zu haben.

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

Esjay

Ahh ok,das erklärt das natürlich. Sry hab ich nicht drauf geachtet. Ich steuere die Begrüßung sozusagen über das Keypad wenn jemand herein kommt, gibt derjenige seinen Code ein, daraufhin wird der Roommate auf Home geschaltet --> HOMEMODE disarm --> HomeCMDmodeAlarm-disarm wird ausgeführt --> Begrüßung.

Wenn ich das richtig verstehe steuerst du deine AN/Abwesenheit über den Standort?!

Gruß


Schlimbo

Hallo Dan,
danke für die Batterie Status Integration.
Habe auch gerade ein MAX Heizkörperthermostat mit schwacher Batterie und wurde Prompt benachrichtigt 8)
Allerdings ist es bei den MAX Geräte so, dass das Batteriereading ein paar Tage lang zwischen OK und Low hin und her springt, bis es dann irgendwann auf Low bleibt, damit wird dann natürlichen bei jedem Wechsel auf Low das cmd getriggert.
Könntest du für die Batterien noch ein "warte-Attribut" einbauen, mit dem man einstellen könnte, dass das Reading z.B. einen Tag auf low stehen muss bevor HomeCMDbatteryLow ausgelöst wird?

Des weiteren ist mir aufgefallen, dass die Variable %SENSORSBATTERY% nicht gefüllt wird.
Gruß
Schlimbo


DeeSPe

Zitat von: Esjay am 22 Mai 2017, 22:48:25
Wenn ich das richtig verstehe steuerst du deine AN/Abwesenheit über den Standort?!

Nein, pro RESIDENT ein G-Tag(s) und ein Handy.

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: Schlimbo am 22 Mai 2017, 22:49:23
Könntest du für die Batterien noch ein "warte-Attribut" einbauen, mit dem man einstellen könnte, dass das Reading z.B. einen Tag auf low stehen muss bevor HomeCMDbatteryLow ausgelöst wird?

HOMEMODE arbeitet bisher fast ausschließlich Event orientiert.
Somit kann ich nicht auf ein Event reagieren welches es nicht gibt.
Mir fallen dafür mehrere Lösungsansätze ein, diese machen die bisher aber doch sehr simple Implementierung aber gleich wieder viel komplexer und ohne das Erzeugen weiterer Readings fallen mir auch gerade keine anderen Lösungen dazu ein. Im Prinzip wäre wohl für diese Fälle auch eine Art Watchdog möglich.
Bin auch hier für gute Vorschläge offen.

Zitat von: Schlimbo am 22 Mai 2017, 22:49:23
Des weiteren ist mir aufgefallen, dass die Variable %SENSORSBATTERY% nicht gefüllt wird.

Danke, das ist tatsächlich in der Programmierung und Qualitätsprüfung untergegangen. :-[
Werde es natürlich ergänzen.

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

Esjay

Zitat von: DeeSPe am 22 Mai 2017, 22:51:20
Nein, pro RESIDENT ein G-Tag(s) und ein Handy.

Gruß
Dan
Ah ok.. Gut, dann hab vielen Dank für deine Mühe und Geduld. Ich wird mir im Rahmen meiner Möglichkeiten einen Workaround bauen.

Gute Nacht

DeeSPe

Zitat von: Esjay am 22 Mai 2017, 23:10:28
Ah ok.. Gut, dann hab vielen Dank für deine Mühe und Geduld. Ich wird mir im Rahmen meiner Möglichkeiten einen Workaround bauen.

Gute Nacht

Wie gesagt, bin für jeden sinnvollen Verbesserungsvorschlag offen.
In erster Linie gehe ich bei der Programmierung natürlich von den Devices aus die ich so einsetze.

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