Sonos Alarmliste auslesen und Alarmzeiten speichern

Begonnen von Yil, 10 März 2016, 14:45:47

Vorheriges Thema - Nächstes Thema

Yil

Hallo zusammen,

hat jemand schonmal die Alarmliste einer Sonos-Box derart auslesen können, dass in einer Dummy-Variablen die Alarmzeiten gespeichert werden, um von dort aus weitere Aktionen wie "Licht an", "Heizung an" etc. zu steuern? Soweit ich das gelesen habe, braucht es hier Know-How mit Perl-Hash-Kommandos.

Konkretes Szenario bei mir:

Alarmzeit - 30 Minuten: Heizung hochsetzen
Alarmzeit: Sonos-Box an, Licht leise hochdimmen

Danke für jede Inspriration,

VG Yil
HM CCU2 mit ca. 35 HM-Komponenten inkl. Bausätzen
fhem auf RPi mit Sonos, EnOcean-CUL, ZWAVE-CUL und Bluetooth
Osram Lightify

rapster

Schau dir das hier mal an, nutze ich bei mir um jeweils einige MInuten vor dem nächsten Alarm das licht hochzudimmen.
https://forum.fhem.de/index.php/topic,44682.msg365016.html#msg365016

MarcoE

Hallo,
mein Szenario war ein klein wenig anders. Ich verwende immer den ersten Alarm der Sonos um mich morgens wecken zu lassen und wollte die Kaffeemaschine 40min vorher einschalten lassen. Ebenso sollte bei jeder Änderung dieses Alarms der DOIF/at angepasst werden. Weitere Randbedingung: Kaffeemaschine bitte nur einschalten falls ich tatsächlich zuhause bin (vergesse manchmal den Wecker zu deaktivieren ebenso wie sie wieder auszuschalten- das passiert nach 2h dann auch wieder)
Zuerst ein notify für die Alarmänderung (119 ist bei mir der erste Alarm):
define alarm_update notify Sonos_Wohnzimmer:AlarmListVersion.* {Alarm_Sonos(119)}

Dann hier noch der Perl Code der das DOIF bzw. bei Alarm once das at anlegt und auch löscht:

sub Alarm_Sonos($)
{
  my($alarmId) = @_;
  my $dayList="";
   my $origStartTime= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{StartTime};
  my $StartTime ="";
  my $tmp ="true";
  my $EndTime="";

  fhem("delete KaffeeAnOnce_$alarmId");
  fhem("delete KaffeeAnDoIf$alarmId");

  my $enabled= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Enabled};
  my $once= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Once}; 
  my $mon= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Monday};
  my $tue= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Tuesday};
  my $wed= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Wednesday};
  my $thu= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Thursday};
  my $fri= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Friday};
  my $sat= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Saturday};
  my $sun= eval(ReadingsVal("Sonos_Wohnzimmer","AlarmList","{}"))->{$alarmId}->{Recurrence_Sunday};

  ($tmp, $StartTime) = TU_Get_Decrement( $origStartTime, "00:40:00" );
  ($tmp, $EndTime) = TU_Get_Increment( $StartTime, "02:00:00" );
  if ($enabled eq 1)
  {
    if ($once eq 1) {fhem("define KaffeeAnOnce_$alarmId at $StartTime set Kaffeemaschine on-till $EndTime");}
    else
    {
      if ($sun eq 1) {$dayList .="0";}
      if ($mon eq 1) {$dayList .="1";}
      if ($tue eq 1) {$dayList .="2";}
      if ($wed eq 1) {$dayList .="3";}
      if ($thu eq 1) {$dayList .="4";}
      if ($fri eq 1) {$dayList .="5";}
      if ($sat eq 1) {$dayList .="6";}
      fhem("define KaffeeAnDoIf$alarmId DOIF ([$StartTime-$EndTime|$dayList] and [HomeStatus] eq \"1\") (set Kaffeemaschine on) DOELSE (set Kaffeemaschine off)");
    }
  }
}


Vielleicht nicht elegant aber funktioniert. Hatte bisher auch mit Perl noch nichts am Hut. Daher bin auch offen für Verbesserungen...

Viele Grüsse,
Marco

Yil

Super und danke!

@Claudiu: ich hab das mal übernommen, und es wird auch alles soweit angelegt. Das ist ja schon die hohe Kunst der fhem-Programmierung! Kompliment.  :)

Theoretisch könnte man das ganze nicht nur auf die dunkle, sondern auch auf die kalte Jahreszeit beziehen und eigene Temp.Messungen einbauen, aufgrund derer dann z.B. im Bad geheizt wird. 

VG Yil

HM CCU2 mit ca. 35 HM-Komponenten inkl. Bausätzen
fhem auf RPi mit Sonos, EnOcean-CUL, ZWAVE-CUL und Bluetooth
Osram Lightify