Neues Modul 98_alarmclock ein Fhem Wecker

Begonnen von FlorianZ, 18 Dezember 2016, 19:03:23

Vorheriges Thema - Nächstes Thema

FlorianZ

Hallo zusammen,

Anbei mein erstes Modul 98_alarmclock.
Ja es ist ein Fhem Wecker  :D
Wenn es jemand testen möchte:


Define

define <name> alarmclock



Set


   ⦁   AlarmTime(1_Monday|2_Tuesday|3_Wednesday|4_Thursday|5_Friday|6_Saturday|7_Sunday|8_Holiday|9_Vacation)
   setzt für jeden Tag eine Weckzeit. Format ist HH:MM
   Beispiel: set <name> AlarmTime1_Monday 06:35[/li][/list]
   ⦁   AlarmTime_Weekdays
   setzt für jeden Werktag die gleiche Weckzeit. Format ist HH:MM
   Beispiel: set <name> AlarmTime_Weekdays 05:50
   ⦁   AlarmTime_Weekend
   setzt für Samstag und Sonntag die gleiche Weckzeit. Format ist HH:MM
   Beispiel: set <name> AlarmTime_Weekend 09:30
   ⦁   AlarmOff(1_Monday|2_Tuesday|3_Wednesday|4_Thursday|5_Friday|6_Saturday|7_Sunday|8_Holiday|9_Vacation|Weekdays|Weekend|All)
   setzt die Weckzeit des entsprechenden Tages auf off.
   ⦁    save(Weekprofile_1|Weekprofile_2|Weekprofile_3|Weekprofile_4|Weekprofile_5)
         speichert die aktuellen Weckzeiten
   ⦁    load(Weekprofile_1|Weekprofile_2|Weekprofile_3|Weekprofile_4|Weekprofile_5)
        lädt ein Profil mit Weckzeiten
   ⦁    skip(NextAlarm|None)
        überspringt den nächsten Alarm.
   ⦁    stop Alarm
        Ein laufender Alarm wird gestoppt.
   ⦁   disable(1|0)
   Deaktiviert/Aktiviert den Wecker.

Attribute

   ⦁   AlarmRoutine
   Eine durch Semikolon ( ; ) getrennte Liste, die Fhem zur Alarmzeit ausführen soll.
   Beispiel: attr <name> AlarmRoutine set Licht on;set Radio on
   ⦁   AlarmRoutineOff
   Eine durch Semikolon ( ; ) getrennte Liste, die Fhem ausführen soll, um den Alarm (AlarmRoutine) zu beenden.
   Beispiel: attr <name> AlarmRoutineOff set Licht off;set Radio off
   ⦁   EventForAlarmOff
   Hier wird festgelegt, durch welches Fhem-Event der Alarm beendet werden soll.
   Ich nutze hierzu einen Taster auf dem Nachtkästchen.
   Es gibt 2 Möglichkeiten:
      1. Auf state eines Device zu triggern   =>    <devicename>:<state>
      Beispiel: attr <name> EventForAlarmOff Taster:off
      2. Auf ein Reading eines Device zu triggern   =>   <devicename>:<readingname>: <value>
      !! Nach dem readingname: kommt vor value ein Leerzeichen!!
      Beispiel: attr <name> EventForAlarmOff Taster:cSceneSet: on
   ⦁   EventForSnooze
   Hier wird festgelegt, durch welches Fhem-Event der Alarm für die im attr SnoozeTimeInSec eingestellte Zeit
   unterbrochen werden soll.
   Die Syntax ist identisch zu EventForAlarmOff.
   Beispiel: attr <name> EventForSnooze Taster:cSceneSet: off
   ⦁   SnoozeTimeInSec
   Hier wird in Sekunden angegeben, wie lange der Alarm unterbrochen wird, wenn das EventForSnooze bei
   laufenden Alarm eintritt. Möglich ist von 1 bis 9999 Sekunden.
   Beispiel: attr <name> SnoozeTimeInSec 240
   Im Beispiel wird nach 4 Minuten die AlarmRoutine wieder ausgeführt.
   ⦁   PreAlarmRoutine
   Eine durch Semikolon ( ; ) getrennte Liste, die Fhem vor der Alarmzeit ausführen soll.
   Beispiel: attr <name> PreAlarmRoutine set Licht dim 30;set ......
   ⦁   SnoozeRoutine
   Eine durch Semikolon ( ; ) getrennte Liste, die Fhem bei Snooze ausführen soll.
   Beispiel: attr <name> SnoozeRoutine set Licht dim 10;set ......
   ⦁   PreAlarmTimeInSec
   Hier wird in Sekunden angegeben wann die PreAlarmRoutine gestartet werden soll.
   Die PreAlarmTimeInSec wird von der AlarmTime subtrahiert.Möglich ist von 1 bis 9999 Sekunden.
   Beispiel: attr <name> PreAlarmTimeInSec 300
   Im Beispiel wird 5 Minuten vor dem regulären Alarm die PreAlarmRoutine ausgeführt.
   ⦁   HardAlarmRoutine
   Eine durch Semikolon ( ; ) getrennte Liste, die ausgeführt wird, wenn während eines laufenden Alarms
   nach vorgegebener Zeit (attr HardAlarmTimeInSec) kein  EventForAlarmOff  oder EventForSnooze eintritt.
   Beispiel: attr <name> HardAlarmRoutine set Sonos_Schlafzimmer Volume 40;set Licht dim 90
   ⦁   HardAlarmTimeInSec
   Hier wird in Sekunden angegeben, wie lange der Alarm "laufen" darf, bis HardAlarmRoutine gestartet wird.
   Möglich ist von 1 bis 9999 Sekunden.
   Beispiel: attr <name> HardAlarmTimeInSec 300
   ⦁   OffRoutine
   Eine durch Semikolon ( ; ) getrennte Liste, die zur OffDefaultTime ausgeführt wird, sollte die AlarmTime für den entsprechenden Tag auf off stehen.
   Beispiel: attr <name> OffRoutine set Heizung on
   ⦁   OffDefaultTime
   Angabe der Default Zeit für die OffRoutine. Format ist HH:MM
   Beispiel: attr <name> OffDefaultTime 07:30
   Im Beispiel wird, wenn an diesen Tag die AlarmTime auf off steht, um 07:30 die OffRoutine gestartet.
   ⦁   MaxAlarmDurationInSec
   Hier wird optional in Sekunden angegeben, nach welcher Zeit, der laufende Alarm automatisch gestoppt wird.
   Beispiel: attr <name> MaxAlarmDurationInSec 120
   ⦁    HolidayDevice
        Name des zu überwachenden holiday device.
        Es gibt 3 Möglichkeiten:
                 1. HolidayDevice des Typs Holiday
                 attr <name> HolidayDevice <devicename>
                 AlarmTime 8_Holiday greift wenn state nicht none ist.
                 2. Auf state eines Device. Bsp. Dummy als HolidayDevice
                 attr <name> HolidayDevice <devicename>:<value>
                 <value> stellt hierbei den Wert für Urlaub dar und steht im Reading state.
                 Bsp.: attr <name> HolidayDevice Mein_Urlaubs_Dummy:Urlaub
                 Hier greift die AlarmTime 8_Holiday wenn der state des Dummy den Wert Urlaub besitzt.
                 3. Auf ein Reading eines Device.
                 attr <name> HolidayDevice <devicename>:<readingname>: <value>
                 <value> stellt den Wert für Urlaub dar und steht im Reading <readingname>.
                 Bsp.: attr <name> HolidayDevice Mein_Urlaubs_Dummy:Heute: Urlaub
        Getrennt durch | (pipe) können mehrere HolidayDevice angegeben werden.
   ⦁   HolidayCheck
        1 aktiviert
        0 deaktiviert
   ⦁   HolidayDays
        Hier kann man optional angeben, an welchen Tagen Holiday greifen darf.
        Beispiel:
        attr <name> HolidayDays 1|2|3|4|5
        Holiday würde nur an Wochentagen greifen
        Default ist: 1|2|3|4|5|6|7
   ⦁    VacationDevice
        Name des zu überwachenden vacation device.
        Es gibt 3 Möglichkeiten:
                 1. VacationDevice des Typs Holiday
                 attr <name> VacationDevice <devicename>
                 AlarmTime 9_Vacation greift wenn state nicht none ist.
                 2. Auf state eines Device. Bsp. Dummy als VacationDevice
                 attr <name> VacationDevice <devicename>:<value>
                 <value> stellt hierbei den Wert für Ferien dar und steht im Reading state.
                 Bsp.: attr <name> VacationDevice Mein_Ferien_Dummy:Ferien
                 Hier greift die AlarmTime 9_Vacation wenn der state des Dummy den Wert Ferien besitzt.
                 3. Auf ein Reading eines Device.
                 attr <name> VacationDevice <devicename>:<readingname>: <value>
                 <value> stellt den Wert für Ferien dar und steht im Reading <readingname>.
                 Bsp.: attr <name> VacationDevice Mein_Ferien_Dummy:Heute: Ferien
        Getrennt durch | (pipe) können mehrere VacationDevice angegeben werden.
   ⦁   VacationCheck
        1 aktiviert
        0 deaktiviert
   ⦁   VacationDays
        Hier kann man optional angeben, an welchen Tagen Vacation greifen darf.
        Beispiel:
        attr <name> VacationDays 1|2|3|4|5
        Vacation würde nur an Wochentagen greifen
        Default ist: 1|2|3|4|5|6|7
   ⦁    PresenceDevice
        Name eines presence device.
        Es gibt 3 Möglichkeiten:
                 1. PresenceDevice des Typs PRESENCE
                 attr <name> PresenceDevice <devicename>
                 Alarmclock storniert den anstehenden Alarm, wenn state den Wert absent besitzt.
                 2. Auf state eines Device. Bsp. Dummy als PresenceDevice
                 attr <name> PresenceDevice <devicename>:<value>
                 <value> stellt hierbei den Wert für "absent" dar und steht im Reading state.
                  Bsp.: attr <name> PresenceDevice Mein_Presence_Dummy:absent
                  Alarmclock storniert den anstehenden Alarm,wenn der state des Dummy den Wert absent besitzt.
                 3. Auf ein Reading eines Device.
                 attr <name> PresenceDevice <devicename>:<readingname>: <value>
                 <value> stellt den Wert für "absent" dar und steht im Reading <readingname>.
                  Bsp.: attr <name> PresenceDevice Mein_Presence_Dummy:Bewohner1: Abwesend
        Getrennt durch | (pipe) können mehrere PresenceDevice angegeben werden.
   ⦁   PresenceCheck
        1 aktiviert
        0 deaktiviert
   ⦁   disable
        disable 1 deaktiviert alle Alarme
        disable 0 aktiviert diese wieder



state

   ⦁   OK
   Kein Alarm heute. Nächster Check um Mitternacht.
   ⦁   next Alarm at HH:MM
   Wird ab Mitternacht gesetzt, wenn heute ein Alarm ansteht.
   ⦁   PreAlarm is running
   Die PreAlarmRoutine wurde ausgeführt.
   ⦁   Alarm is running
   Der Alarm hat gestartet und die Routine wird ausgeführt.
   ⦁   Alarm is stopped
   Alarm wurde durch EventForAlarmOff gestoppt.
   ⦁   Snooze for XX sec
   EventForSnooze hat den Alarm unterbrochen und wird nach xx Sekunden wieder ausgeführt.
   ⦁   OffRoutine is running
   Die OffRoutine wurde gestartet.
   ⦁   next OffRoutine at HH:MM
   Wird ab Mitternacht gesetzt, wenn heute kein Alarm ansteht aber das Attribut OffDefaultTime gesetzt wurde .
   ⦁   deactivated
   alarmclock wurde durch disable 1 deaktiviert .
   ⦁   skip next Alarm
   Der nächste Alarm wird übersprungen .


Über Feedback würde ich mich freuen.

Gruß
Florian

## 2017-05-05  ##
98_alarmclock ist jetzt im FHEM Repository und wird per Update verteilt



Devender

Hi Florian,

ich bin jetzt mal dazu gekommen dein Modul bei mir einzurichten. Aktuell läuft mein Wecker noch über einen Weekdaytimer.
Ich finde es ganz gut, dass man beim Wecken eben auch Dinge tun kann wie Radio on etc.
Aktuell habe ich es mal rudimentär eingerichtet und gesagt, dass um 5:25 mein Sonossystem angeschaltet werden soll.

Was mir direkt aufgefallen ist:
Es gibt kein set AlarmTime "alle Wochentage" oder nur "Wochenende" und keine Möglichkeit über z.b die Eventmap und webCmd den Wecker komplett einmal auszuschalten.
Ebenso noch die Frage: Ich habe einen dummy: Zeitsteuerung. Nur wenn der den State "AN" hat soll der Wecker überhaupt greifen.
Wie muss ich das einstellen?
Bei meinem WeekDayTimer sage ich sowas: Sonos Mo-Fr|05:25|on Mo-Fr|05:45|off (Value("Zeitsteuerung") eq "an")

Mir gefällt es, dass ich bei deinem Modul nicht noch extra Code in die myUtils verlagern muss  :D

Vielleicht findest du ja Zeit für meine Fragen.

Danke schon mal und Gruß,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Devender

#2
noch eine Frage  ;D
Mein Alarm um 21:10 hat gerade angeschaltet und steht jetzt auf Alarm is running.
Wie geht das jetzt wieder aus, wenn ich nichts weiter definiere?

Ziel wäre (für morgens): Wecker schaltet um 5:25 das Sonos ein und gibt mir eine Sprachdurchsage (funktioniert soweit im Test)
Nach 10 Minuten bekomme ich eine weitere Meldung mit den Staumeldung (TTS ließt vor).
10 Minuten später ggf. durch Erkennung der Abwesenheit und der dadurch eingeschalteten Alarmanlage geht das Sonos dann wieder aus , sprich der Wecker hat seine Arbeit getan und sollte
nicht mehr auf running stehen.

Wie kann ich meinen Testalarm löschen? (Somit auch das Reading)?
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

FlorianZ

Hallo Dirk,

ein set für Wochentage und ein set für Wochenende finde ich gut. Werde ich am Freitag gleich mal mit einbauen.
Eine disable für den Wecker steht ebenfalls auf meiner todo.
ZitatNur wenn der den State "AN" hat soll der Wecker überhaupt greifen.
Das ist aktuell leider noch nicht möglich.
Hier überlege ich mir was, da ich den Wecker zukünftig auch gerne zb auf Urlaub überprüfen lassen möchte.

Gruß
Florian

Mitch

Hi Florian, Danke für das Modul.
Werde ich morgen testen.
FHEM im Proxmox Container

Devender

Super Danke dir!
Stelle mich gerne als Tester zur Verfügung  ;)

Morgen ist der erste Livebetrieb um 05:25!
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

FlorianZ

der Wecker wartet jetzt bei state "Alarm is running" auf ein Event, dass mit dem Attribut EventForAlarmOff gesetzt wird, um den Wecker zu beenden.
Du kannst durch jedes Device bzw. Reading den Wecker stoppen lassen. Z.b. auch durch einen Dummy .
Alternativ kannst du auch auf deinen Sonos triggern lassen wenn der auf pause geht, da das Event nur bei state Alarm is running berücksichtigt wird.
attr <name> EventForAlarmOff Sonos_Schlafzimmer:transportState: STOPPED

Gruß
Florian


FlorianZ

Hallo zusammen,

Erstes Update von 98_alarmclock auf Version 0.0.2
Modul und Beschreibung sind im 1. Beitrag aktualisiert.

Gruß
Florian

Devender

Salü Florian,

danke für deine Anpassung :-)
MaxAlarmDurationInSec ist super. Da kann ich jetzt 20min einstellen und danach ist der Wecker auch wieder im Status OK ohne das eine OffRoutine passieren muss.  :)

Was muss mich machen, damit er nach Ablauf der eingestellen Weckzeit (in meinem Fall nach 20min) noch einen Befehl ausführt; In meinem Fall dann das Sonos wieder aus?

Das Disable funktionert soweit auch. Allerdings bleibt der Status deactivated wenn man das disable Attribute wieder löscht. Wenn eine eingestellte Weckzeit folgt funktionert er aber normal.
Dadurch erkennt man aber nicht unbedingt, ober der Wecker deaktiviert ist.

Besteht die Möglichkeit anstelle von disable 0/1 "an/aus" als set-Befehl hinzuzufügen?
set Wecker aus
Damit könnte man dann eine Urlaubssteuerung einfacher abbilden und im Dashbord einfach schnell mal "aus" klicken  ;D
Über set Wecker AlarmOff kann ich aktuell ja nur Tageweise den Alarm deaktivieren.

Grüße,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

FlorianZ

Hallo Dirk,

Zitat von: Devender am 23 Dezember 2016, 22:27:31
Was muss mich machen, damit er nach Ablauf der eingestellen Weckzeit (in meinem Fall nach 20min) noch einen Befehl ausführt; In meinem Fall dann das Sonos wieder aus?
Wenn der Wecker gestoppt wird, wird die AlarmRoutineOff ausgeführt.
attr <name> AlarmRoutineOff set Sonos Stop

Zitat von: Devender am 23 Dezember 2016, 22:27:31
Das Disable funktionert soweit auch. Allerdings bleibt der Status deactivated wenn man das disable Attribute wieder löscht. Wenn eine eingestellte Weckzeit folgt funktionert er aber normal.
Dadurch erkennt man aber nicht unbedingt, ober der Wecker deaktiviert ist.
Vorerst bitte nach einen disable 1 ein disable 0 setzen => Timer werden sofort aufgerufen und gesetzt.

Zitat von: Devender am 23 Dezember 2016, 22:27:31
Besteht die Möglichkeit anstelle von disable 0/1 "an/aus" als set-Befehl hinzuzufügen?
Kommt mit dem nächsten Update.

Gruß
Florian

FlorianZ

#10
So,

Nächstes Update ist fertig und im ersten Beitrag aktualisiert.  :D

Änderungen sind:
- Zusätzlich set AlarmOff für Weekdays,Weekend und All.

- Set disable um den Wecker über set zu deaktivieren
       => Es wird KEIN Alarm mehr ausgeführt. Auch keine OffRoutine!!

- Neues Attribut SnoozeRoutine
         => bei Snooze wird jetzt nicht mehr die AlarmOffRoutine sondern SnoozeRoutine ausgeführt.
         Bei mir hat sich im "live" Betrieb gezeigt, dass man besser 2 verschiedene Routinen hat.

- Commandref im Modul
        => Könnte bitte mal jemand Korrekturlesen  ;)

- Timer werden nach dem löschen des attr disable sofort gestartet.

Gruß
Florian

Devender

Salü Florian!

neue Version habe ich bei mir eingespielt. Heute morgen hat alles funktioniert  :D

Ich hab mal über die Commandref gelesen. Ist soweit verständlich geschrieben und vom Englisch passt es auch meiner Meinung nach.
Bleibt es bei NUR einer Englischen Doku oder willst du auch für die deutsche Commandref was setzen?

Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

FlorianZ

Hallo Dirk.

Das freut mich, dass das Modul bei dir funktioniert.  :)
Eine deutsche Doku kommt noch. Die englische Doku war für mich Prio 1, da es
für svn Voraussetzung ist.
Gibt es noch Probleme oder Wünsche?

Devender

*hm ich glaube aktuell passt für mich alles  ;D

Danke für deine Mühe und die schnelle Umsetzung der Wünsche!

btw. so ein wirkliches anderes Weckermodul wie deins habe ich hier noch nicht gefunden.
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Esjay

Hallo Florian,
Ich dachte ich lasse mal ein Danke da.Ich bin gerade unterwegs,und kann das Modul noch nicht inststallieren,da es noch nicht per Update verfügbar ist. Hast du schon Pläne,wann es soweit ist?
Grüße