Weckzeit anzeigen und einstellen (FritzBox!Fon FHEM webpgm2 )

Begonnen von LaLeLu, 15 Januar 2012, 17:06:56

Vorheriges Thema - Nächstes Thema

borsti67

                                                 

> das kann so aber nicht stimmen, denn was wäre dann  z.B. '9'? ;-)

wieso nicht, steht doch sogar in der Liste drin?!?

>> Habe empirisch erforscht, dass die Kombination tatsächlich aus
>> Zweierpotenzen (+1) aufgebaut ist:
>> 9 = Do

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
cu/2
Borsti
---
FHEM 5.8 auf Synology DS211j (bis 11/17) | FHEM 6.0 auf Raspi Zero W (bis 11/20) | FHEM 6.2 als VM in Synology DS1815+ (ab 11/20)

Oskar

                                                     

9 wäre Donnerstag oder Mo+Di+Mi: 1+3+5=9.

Wäre zumindest nicht ganz vollständig eindeutig...

Grüße
   Oskar
Am 31.03.2012 um 14:12 schrieb borsti:

>> das kann so aber nicht stimmen, denn was wäre dann  z.B. '9'? ;-)
>
> wieso nicht, steht doch sogar in der Liste drin?!?
>
>>> Habe empirisch erforscht, dass die Kombination tatsächlich aus
>>> Zweierpotenzen (+1) aufgebaut ist:
>>> 9 = Do
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

Guest

Originally posted by: <email address deleted>

Hallo,

ich komme mit der Formatierung der Variable für die Zeit nicht zurecht  und
finde auch nichts dazu. Die Fehlermeldung ist:

the at function "Wecker1" must return a timespec and not Bareword "Wecker1"
not allowed while "strict subs" in use at (eval 19178) line 1, <$fh> line
120.

Ich habe mir die Uhrzeit so gebaut:

...
my $weckzeit= sprintf("%%02d:%%02d:00", $wb, $wc);;\
fhem "set Wecker1 $weckzeit";;\
...

$wb, $wc sind Stunden/Minuten der Weckzeit, die Zeit wird als Dummy auch
korrekt angezeigt, nur beim Aufruf (at) kommt obige Fehlermeldung

(Mit dem Weg über mktime() bin ich auch gescheitert, da gab es ein Problem
mit $mon.)

Was Kann ich tun?


Am Sonntag, 25. März 2012 11:34:38 UTC+2 schrieb unimatrix:
>
> super sache!
>
> die Umrechnung sollte kein Problem sein. Meistens dürfte einen der
> Zeitpunkt des NÄCHSTEN Weck-Events interessieren, man muss also prüfen, ob
> der heute schon vorbei ist oder nicht:
>
> ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);
> # also JETZT
>
> $hh=6;
> $mm=30;
> # als Beispiel für Wecker um 6:30 (musst du entsprechend befüllen)
>
> if($hour>$hh || ($hour==$hh && $min>$mm)){
>   $offset=86400 # (24*60*60)
> }
> # war es heute schon, dann Offset dazu, also der Wecker "klingelt" erst
> morgen wieder
>
> $wecker=(mktime( $sec, $mm, $hh, $mday, $mon, $year))+$offset;
> #Epoch-Zeit des nächsten Weckers ist nun in $wecker
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hat noch jemand andere Weckerlösungen ? Ich dachte zuerst an eine ipad App, welche, sobald der Alarm scharf geschalten wird, außer Musik auch noch einen Kalendereintrag ( mit 30 min Erinnerung ) erzeugt. Danach könnte man e.g. die  Erinnerungszeit dazu benutzen die Heizung hochzufahren.

Aber ggf. gibt es schon einfachere Lösungen.

Danke
Andreas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

UliM

                                                 

mit FB-Weckzeit oder ohne?
Ich nutze timeslider, um die Weckzeit zu setzen.
Sehr komfortabel.
=8-)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Guest

Originally posted by: <email address deleted>

Danke für den Tip
( http://www.highspheres.com/products/wakemeup/time_slider.htm)

Der Hintergrund meiner Frage ist, dass ich gerne von einer reinen Uhrzeit
bezogenen Steuerung zu einer mehr personenbezogenen Steuerung  im FHEM
wechseln würde.

Eine mögliches Szenario dabei wäre, dass eine Weckfunktion (auf einem
Tablet ? ) automatisch die Wohnung auf Standby (Nachtmodus)  schaltet
sobald ich die Weckfunktion scharf schalte ( Liege im Bett) , z.B durch ein
"Set all devices off".
Die Weckfunktion selbst könnte ein Kalenderevent sein , incl
Erinnerungsfunktion. Sobald FHEM die Erinnerungsfunktion ( für Wecker = on
) mit notify erkennt , würden sich alle Geräte "Set all devices on".wieder
anschalten, damit die Wohnung "hochgefahren" ist wenn der Wecker klingelt
und ich aufstehe muss.

Damit wäre die "Nachtabschaltung" nicht mehr Uhrzeit-bezogen sondern
Personen-bezogen realisiert.

Gibt es sowas ?

Andreas
P.S: Durch die Zuhause-Erkennung über WLAN, die Google Kalenderfunktion,
die FB Anruferkennung, Twilight Function,... kann man fast alle Ereignisse
von einer Uhrzeit in Personen/Situtions-bezogene Steuerung umstellen.  
     

Am Samstag, 17. November 2012 10:13:32 UTC+1 schrieb UliM:
>
> mit FB-Weckzeit oder ohne?
> Ich nutze timeslider, um die Weckzeit zu setzen.
> Sehr komfortabel.
> =8-)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

UliM

                                                 

Hi,
siehe http://www.fhemwiki.de/wiki/Zuhause-Status sowie
http://www.fhemwiki.de/wiki/Zuhause-Status_per_WLAN_Anmeldung_(Fritzbox)
und http://www.fhemwiki.de/wiki/Wakeuplight
Evtl gibt Dir das Anregungen :)
Gruß Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

UliM

                                                 

Am Samstag, 17. November 2012 13:19:55 UTC+1 schrieb Andreas Schaller:
>
> Danke für den Tip (
> http://www.highspheres.com/products/wakemeup/time_slider.htm)

Hi, ich meinte timeslider in fhem. Beispiel ist im unteren Teil von  
http://www.fhemwiki.de/wiki/Wakeuplight dargestellt.
Sieht in fhem aus wie auf dem screesnhot. Die länglichen Kästen enthalten
"Stellknöpfe", die sich mit der Maus oder auf dem touchpad mit dem Finger
bedienen lassen. Damit kann man die Weckzeit prima einstellen. Codebeispiel
wie gesagt in o.g. Wiki-Eintrag.

Funktioniert in fhemweb und in floorplan.

Gruß, Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Guest

Originally posted by: <email address deleted>

Hi,

ich habe eine Funktion geschrieben,
die die Weckzeiten der FritzBox ausliest (Danke für die Vorarbeiten! Das
hätte ich nie geschafft.),
die nächste Weckzeit ausgibt
und bei Wunsch durch einen Parameter eine hierzu verschobene Uhrzeit
berechnet:

*Beispiele*
{FB_NextAlarmClockTime('next',-10)}
23:20

{FB_NextAlarmClockTime('next full',-10)}
HEUTE ist ein Wecktag, Weckzeit ist (23:30) Alarm-Nr. 1, Telefon: 60,
Wecktage: Einmal-Alarm Offset:-10 Min. => 23:20

{FB_NextAlarmClockTime('all',0)}

HEUTE ist ein  Wecktag, Weckzeit ist abgelaufen (06:50)  Alarm-Nr. 0, Telefon: 60, Wecktage: MO DI MI DO FR  Offset:0
HEUTE ist ein  Wecktag, Weckzeit ist (23:30)  Alarm-Nr. 1, Telefon: 60, Wecktage: Einmal-Alarm Offset:0
HEUTE ist ein  Wecktag, Weckzeit ist (23:50)  Alarm-Nr. 2, Telefon: 60, Wecktage: MO MI FR SO  Offset:0


{FB_NextAlarmClockTime('sort',10)}

HEUTE ist ein  Wecktag, Weckzeit ist (23:30)  Alarm-Nr. 1, Telefon: 60, Wecktage: Einmal-Alarm Offset:10
HEUTE ist ein  Wecktag, Weckzeit ist (23:50)  Alarm-Nr. 2, Telefon: 60, Wecktage: MO MI FR SO  Offset:10
HEUTE ist ein  Wecktag, Weckzeit ist abgelaufen (06:50)  Alarm-Nr. 0, Telefon: 60, Wecktage: MO DI MI DO FR  Offset:10


##############################################
# $Id: 99_myUtils.pm 1932 2012-10-07 20:15:33Z LaLeLu $
package main;

use strict;
use warnings;
use POSIX;
 
## Ermittelt die nächste Weckzeit aus der FritzBox.
## Es werden auch die Nr. des Alarms und die Nr. des Telefons ausgegeben.
## Damit können ggf. verschiedene Schaltaufgaben gesteuert werden.
## Modi für den 1. Parameter: all, sort, next full, next
## Der 2. Parameter gibt an, um wie viele Minuten der ursprüngliche Alarm
verschoben werden soll.

 sub FB_NextAlarmClockTime($$)
 
  {
    my $PreturnMode = shift;
    my $Poffset = shift;

    my @FritzAlarmClockTime;
    my @FritzAlarmClockActive; my @FritzAlarmClockActiveJN;
    my @FritzAlarmClockNumber;
    my @FritzAlarmClockWeekdays; my @FritzAlarmClockWeekdaysMod;
    my @FAArray; my @FAArraySort;
    my $k; my $i;
    my @Weekdays;
    my $AlarmDay; my $AlarmTime; my $ToLate;
    my $NextAlarmTime = "KEIN Alarm vorhanden";

    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
    my $we    = (($wday==0 || $wday==6) ? 1 : 0);
    my $myNow = $hour.':'.$min;

    my $ReturnText;


    foreach $k (0..2) {
      # Die Weckerdaten aus der FritzBox lesen
      my $AStr_Time     = "ctlmgr_ctl r telcfg
settings/AlarmClock".$k."/Time";
      my $AStr_Active   = "ctlmgr_ctl r telcfg
settings/AlarmClock".$k."/Active";
      my $AStr_Number   = "ctlmgr_ctl r telcfg
settings/AlarmClock".$k."/Number";
      my $AStr_Weekdays = "ctlmgr_ctl r telcfg
settings/AlarmClock".$k."/Weekdays";
      $FritzAlarmClockTime[$k]        =  `$AStr_Time`;
      $FritzAlarmClockActive[$k]      =  `$AStr_Active`;
      $FritzAlarmClockNumber[$k]      =  `$AStr_Number`;
      $FritzAlarmClockWeekdays[$k]    =  `$AStr_Weekdays`;
      $FritzAlarmClockWeekdaysMod[$k] =  $FritzAlarmClockWeekdays[$k];
      $FritzAlarmClockActive[$k]      =~ s/\s*$//g;

      # Wecktage ermitteln
      $Weekdays[$k] = "";
      foreach $i (reverse 0..6) {
        if ($FritzAlarmClockWeekdaysMod[$k] - 2**$i >= 0) {
          if ($i == 6) {$Weekdays[$k] = "SO ".$Weekdays[$k]};
          if ($i == 5) {$Weekdays[$k] = "SA ".$Weekdays[$k]};
          if ($i == 4) {$Weekdays[$k] = "FR ".$Weekdays[$k]};
          if ($i == 3) {$Weekdays[$k] = "DO ".$Weekdays[$k]};
          if ($i == 2) {$Weekdays[$k] = "MI ".$Weekdays[$k]};
          if ($i == 1) {$Weekdays[$k] = "DI ".$Weekdays[$k]};
          if ($i == 0) {$Weekdays[$k] = "MO ".$Weekdays[$k]};
          $FritzAlarmClockWeekdaysMod[$k] = $FritzAlarmClockWeekdaysMod[$k]
- 2**$i;
        };
      };
  # Falls keine Wiederholung eingerichtet ist = Einmal-Alarm
  if ($FritzAlarmClockWeekdays[$k] == 0) {
   $Weekdays[$k] = 'Einmal-Alarm';
  };

      my %Days = (0,"SO",1,"MO",2,"DI",3,"MI",4,"DO",5,"FR",6,"SA");

  # Ist heute ein Wecktag?
      if ($Weekdays[$k] =~ /$Days{$wday}/ or
      $FritzAlarmClockWeekdays[$k] == 0) {
      $AlarmDay = 'HEUTE ist ein  Wecktag'
      }
  else {$AlarmDay = 'HEUTE ist kein Wecktag'};

  # Ist die Weckzeit schon abgelaufen?
  $AlarmTime =
substr($FritzAlarmClockTime[$k],0,2).":".substr($FritzAlarmClockTime[$k],2,2);
  if ($AlarmTime le $myNow) {$ToLate = ', Weckzeit ist abgelaufen'}
else                    {$ToLate = ', Weckzeit ist'};

  # Info über eine Weckzeit
    $FAArray[$k] = ($AlarmDay.$ToLate.' ('.$AlarmTime.') '.' Alarm-Nr.
'.$k.', Telefon: '.$FritzAlarmClockNumber[$k].', Wecktage:
'.$Weekdays[$k].' Offset:'.$Poffset);
      if ($FritzAlarmClockActive[$k] != 1) {
      $FAArray[$k] = ('Kein aktiver Alarm, Alarm-Nr. '.$k)
      };
$FAArray[$k] =~ s/\n//; # Zeilenvorschub entfernen

  # Welches ist die nächste Weckzeit?
     if (($Weekdays[$k]                =~ /$Days{$wday}/  or
        $FritzAlarmClockWeekdays[$k] == 0             ) and
          $AlarmTime                   ge $myNow          and
          $NextAlarmTime               gt $AlarmTime      and
          $FritzAlarmClockActive[$k] == 1                    )
        {$NextAlarmTime = $AlarmTime};
         
    };


     # Rückgabe aller aktiven Weckzeiten
 if ($PreturnMode =~ /all/) {
 $ReturnText = join("\n", @FAArray)
 }

     # Nach Zeit sortierte Rückgabe aller aktiven Weckzeiten
 elsif ($PreturnMode =~ /sort/) {
  $ReturnText = join("\n", sort(@FAArray))
 }

     # Rückgabe der ersten aktiven Weckzeit als Uhrzeit
 elsif ($PreturnMode =~ /next/) {

 # Offset mit Parameter 2 berechnen (Rechnen mit Zeiten)
     my $NextAlarmTimeP =
mktime(0,substr($NextAlarmTime,3,2),substr($NextAlarmTime,0,2),$mday,$month,$year,$wday,$yday,$isdst);
 my $NextAlarmTimePM = $NextAlarmTimeP + $Poffset * 60;
     my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) =
localtime($NextAlarmTimePM);
 my $NextAlarmTimePHM = $Phour.':'.$Pmin;
      # Rückgabe der ersten aktiven Weckzeit als Text
  if ($PreturnMode =~ /next full/) {
  @FAArraySort = sort(@FAArray);
     $ReturnText = $FAArraySort[0].' Min. => '.$NextAlarmTimePHM
    }
 else {$ReturnText = $NextAlarmTimePHM};
 }
 
 # ggf. Fehlermeldung
 else {
  $ReturnText = "\'Bsp.: FB_NextAlarmClockTime(\'next\',-10) Werte für den
1. Parameter sind: all, sort, next full, next; Der 2. Parameter muss eine
positive oder negative Zahl sein."
 };


    return $ReturnText;
   
  }

#Ende
1;

Viel Spaß beim Testen. Ich hoffe es funktioniert.

LaLeLu

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Gratuliere ! Funktionieren damit auch Routinen wie

Define device_on at *{FB_NextAlarmClockTime('next',-10)} {\
  .......

Schaltet z.B. ein Device jeden Tag 10 min vor dem FB Alarm an ?

Danke
Andreas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Ich würde das * weglassen, denn ob geweckt wird oder nicht, bestimmt ja ab
sofort die FritzBox :-))

Ansonsten habe ich es gerade getestet => funktioniert.

Übrigens: Über die bei 'next full' gelieferten Werte für die Telefonnummer
oder die Alarm-Nr. kann man auch verschiedene Dinge steuern. Wie zum
Beipiel bei Alarm-Nr. 0 morgens einschalten und den Alarm-Nr. 2
grundsätzlich zum Ausschalten nutzen. Man muss sich nur den richtigen Teil
z.B. über substr() herausholen.   *Dies könnte den WAF deutlich erhöhen!*

LaLeLu

Am Montag, 19. November 2012 22:04:23 UTC+1 schrieb Andreas Schaller:
>
> Gratuliere ! Funktionieren damit auch Routinen wie
>
> Define device_on at *{FB_NextAlarmClockTime('next',-10)} {\
>   .......
>
> Schaltet z.B. ein Device jeden Tag 10 min vor dem FB Alarm an ?
>
> Danke
> Andreas
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Halt stopp, ich glaube, dass das mit at nur exakt einmal funktioniert.

Ich werde ein define t_FBakt at +*00:30 {...} schreiben. Darin wird jede
halbe Stunde die Weckzeit aktualisiert und über das beschriebene     {fhem("Define
t_xyz at *{FB_NextAlarmClockTime('next',-10)} gesetzt. Dies schaffe ich
aber erst in ein paar Tagen. Falls jemand anderes schon mal aktiv wird,
ungefähr so sollte es aussehen?

define t_FBakt at +*00:30 {\
    if($defs{"t_xyz"}) {\
   {Log 4, ('  t_Aufstehen:  Das bereits existierende NOTIFY t_Aufstehen
löschen.') }\
   {fhem("delete t_xyz") }\
    }\
    {fhem("Define t_xyz at +*".{FB_NextAlarmClockTime('next',-10)}." set
Kueche_Licht off")}
}\

Leider funktioniert das aber nicht so wie gedacht. Da muss ich einfach
weiter Fehler suchen. Jetzt gehe ich aber erst mal schlafen.

Vielleicht gibt es aber auch einen eleganteren Weg?

LaLeLu




Am Montag, 19. November 2012 22:49:25 UTC+1 schrieb LaLeLu:
>
> Ich würde das * weglassen, denn ob geweckt wird oder nicht, bestimmt ja ab
> sofort die FritzBox :-))
>
> Ansonsten habe ich es gerade getestet => funktioniert.
>
> Übrigens: Über die bei 'next full' gelieferten Werte für die Telefonnummer
> oder die Alarm-Nr. kann man auch verschiedene Dinge steuern. Wie zum
> Beipiel bei Alarm-Nr. 0 morgens einschalten und den Alarm-Nr. 2
> grundsätzlich zum Ausschalten nutzen. Man muss sich nur den richtigen Teil
> z.B. über substr() herausholen.   *Dies könnte den WAF deutlich erhöhen!*
>
> LaLeLu
>
> Am Montag, 19. November 2012 22:04:23 UTC+1 schrieb Andreas Schaller:
>>
>> Gratuliere ! Funktionieren damit auch Routinen wie
>>
>> Define device_on at *{FB_NextAlarmClockTime('next',-10)} {\
>>   .......
>>
>> Schaltet z.B. ein Device jeden Tag 10 min vor dem FB Alarm an ?
>>
>> Danke
>> Andreas
>>
>>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Klingt sehr wie bei der Zuhausefunktion über WLAN. Was ich nicht verstehe ist warum da alle 30 min den Alarm überprüfen willst. Fuer mich wuerde 1 mal täglich reichen e.g. um 1 Uhr Nachts werden alle (3) Alarme für den nächsten Tag scharf geschaltet.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Prima!


Am Montag, 19. November 2012 21:35:52 UTC+1 schrieb LaLeLu:
>
> Hi,
>
> ich habe eine Funktion geschrieben,
> die die Weckzeiten der FritzBox ausliest (Danke für die Vorarbeiten! Das
> hätte ich nie geschafft.),
> die nächste Weckzeit ausgibt
> und bei Wunsch durch einen Parameter eine hierzu verschobene Uhrzeit
> berechnet:
>
> *Beispiele*
> {FB_NextAlarmClockTime('next',-10)}
> 23:20
>
> {FB_NextAlarmClockTime('next full',-10)}
> HEUTE ist ein Wecktag, Weckzeit ist (23:30) Alarm-Nr. 1, Telefon: 60,
> Wecktage: Einmal-Alarm Offset:-10 Min. => 23:20
>
> {FB_NextAlarmClockTime('all',0)}
>
> HEUTE ist ein  Wecktag, Weckzeit ist abgelaufen (06:50)  Alarm-Nr. 0, Telefon: 60, Wecktage: MO DI MI DO FR  Offset:0
> HEUTE ist ein  Wecktag, Weckzeit ist (23:30)  Alarm-Nr. 1, Telefon: 60, Wecktage: Einmal-Alarm Offset:0
> HEUTE ist ein  Wecktag, Weckzeit ist (23:50)  Alarm-Nr. 2, Telefon: 60, Wecktage: MO MI FR SO  Offset:0
>
>
> {FB_NextAlarmClockTime('sort',10)}
>
> HEUTE ist ein  Wecktag, Weckzeit ist (23:30)  Alarm-Nr. 1, Telefon: 60, Wecktage: Einmal-Alarm Offset:10
> HEUTE ist ein  Wecktag, Weckzeit ist (23:50)  Alarm-Nr. 2, Telefon: 60, Wecktage: MO MI FR SO  Offset:10
> HEUTE ist ein  Wecktag, Weckzeit ist abgelaufen (06:50)  Alarm-Nr. 0, Telefon: 60, Wecktage: MO DI MI DO FR  Offset:10
>
>
> ##############################################
> # $Id: 99_myUtils.pm 1932 2012-10-07 20:15:33Z LaLeLu $
> package main;
>
> use strict;
> use warnings;
> use POSIX;
>  
> ## Ermittelt die nächste Weckzeit aus der FritzBox.
> ## Es werden auch die Nr. des Alarms und die Nr. des Telefons ausgegeben.
> ## Damit können ggf. verschiedene Schaltaufgaben gesteuert werden.
> ## Modi für den 1. Parameter: all, sort, next full, next
> ## Der 2. Parameter gibt an, um wie viele Minuten der ursprüngliche Alarm
> verschoben werden soll.
>
>  sub FB_NextAlarmClockTime($$)
>  
>   {
>     my $PreturnMode = shift;
>     my $Poffset = shift;
>
>     my @FritzAlarmClockTime;
>     my @FritzAlarmClockActive; my @FritzAlarmClockActiveJN;
>     my @FritzAlarmClockNumber;
>     my @FritzAlarmClockWeekdays; my @FritzAlarmClockWeekdaysMod;
>     my @FAArray; my @FAArraySort;
>     my $k; my $i;
>     my @Weekdays;
>     my $AlarmDay; my $AlarmTime; my $ToLate;
>     my $NextAlarmTime = "KEIN Alarm vorhanden";
>
>     my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
>     my $we    = (($wday==0 || $wday==6) ? 1 : 0);
>     my $myNow = $hour.':'.$min;
>
>     my $ReturnText;
>
>
>     foreach $k (0..2) {
>       # Die Weckerdaten aus der FritzBox lesen
>       my $AStr_Time     = "ctlmgr_ctl r telcfg
> settings/AlarmClock".$k."/Time";
>       my $AStr_Active   = "ctlmgr_ctl r telcfg
> settings/AlarmClock".$k."/Active";
>       my $AStr_Number   = "ctlmgr_ctl r telcfg
> settings/AlarmClock".$k."/Number";
>       my $AStr_Weekdays = "ctlmgr_ctl r telcfg
> settings/AlarmClock".$k."/Weekdays";
>       $FritzAlarmClockTime[$k]        =  `$AStr_Time`;
>       $FritzAlarmClockActive[$k]      =  `$AStr_Active`;
>       $FritzAlarmClockNumber[$k]      =  `$AStr_Number`;
>       $FritzAlarmClockWeekdays[$k]    =  `$AStr_Weekdays`;
>       $FritzAlarmClockWeekdaysMod[$k] =  $FritzAlarmClockWeekdays[$k];
>       $FritzAlarmClockActive[$k]      =~ s/\s*$//g;
>
>       # Wecktage ermitteln
>       $Weekdays[$k] = "";
>       foreach $i (reverse 0..6) {
>         if ($FritzAlarmClockWeekdaysMod[$k] - 2**$i >= 0) {
>           if ($i == 6) {$Weekdays[$k] = "SO ".$Weekdays[$k]};
>           if ($i == 5) {$Weekdays[$k] = "SA ".$Weekdays[$k]};
>           if ($i == 4) {$Weekdays[$k] = "FR ".$Weekdays[$k]};
>           if ($i == 3) {$Weekdays[$k] = "DO ".$Weekdays[$k]};
>           if ($i == 2) {$Weekdays[$k] = "MI ".$Weekdays[$k]};
>           if ($i == 1) {$Weekdays[$k] = "DI ".$Weekdays[$k]};
>           if ($i == 0) {$Weekdays[$k] = "MO ".$Weekdays[$k]};
>           $FritzAlarmClockWeekdaysMod[$k] =
> $FritzAlarmClockWeekdaysMod[$k] - 2**$i;
>         };
>       };
>   # Falls keine Wiederholung eingerichtet ist = Einmal-Alarm
>   if ($FritzAlarmClockWeekdays[$k] == 0) {
>    $Weekdays[$k] = 'Einmal-Alarm';
>   };
>
>       my %Days = (0,"SO",1,"MO",2,"DI",3,"MI",4,"DO",5,"FR",6,"SA");
>
>   # Ist heute ein Wecktag?
>       if ($Weekdays[$k] =~ /$Days{$wday}/ or
>       $FritzAlarmClockWeekdays[$k] == 0) {
>       $AlarmDay = 'HEUTE ist ein  Wecktag'
>       }
>   else {$AlarmDay = 'HEUTE ist kein Wecktag'};
>
>   # Ist die Weckzeit schon abgelaufen?
>   $AlarmTime =
> substr($FritzAlarmClockTime[$k],0,2).":".substr($FritzAlarmClockTime[$k],2,2);
>   if ($AlarmTime le $myNow) {$ToLate = ', Weckzeit ist abgelaufen'}
> else                    {$ToLate = ', Weckzeit ist'};
>
>   # Info über eine Weckzeit
>     $FAArray[$k] = ($AlarmDay.$ToLate.' ('.$AlarmTime.') '.' Alarm-Nr.
> '.$k.', Telefon: '.$FritzAlarmClockNumber[$k].', Wecktage:
> '.$Weekdays[$k].' Offset:'.$Poffset);
>       if ($FritzAlarmClockActive[$k] != 1) {
>       $FAArray[$k] = ('Kein aktiver Alarm, Alarm-Nr. '.$k)
>       };
> $FAArray[$k] =~ s/\n//; # Zeilenvorschub entfernen
>
>   # Welches ist die nächste Weckzeit?
>      if (($Weekdays[$k]                =~ /$Days{$wday}/  or
>         $FritzAlarmClockWeekdays[$k] == 0             ) and
>           $AlarmTime                   ge $myNow          and
>           $NextAlarmTime               gt $AlarmTime      and
>           $FritzAlarmClockActive[$k] == 1                    )
>         {$NextAlarmTime = $AlarmTime};
>          
>     };
>
>
>      # Rückgabe aller aktiven Weckzeiten
>  if ($PreturnMode =~ /all/) {
>  $ReturnText = join("\n", @FAArray)
>  }
>
>      # Nach Zeit sortierte Rückgabe aller aktiven Weckzeiten
>  elsif ($PreturnMode =~ /sort/) {
>   $ReturnText = join("\n", sort(@FAArray))
>  }
>
>      # Rückgabe der ersten aktiven Weckzeit als Uhrzeit
>  elsif ($PreturnMode =~ /next/) {
>
>  # Offset mit Parameter 2 berechnen (Rechnen mit Zeiten)
>      my $NextAlarmTimeP =
> mktime(0,substr($NextAlarmTime,3,2),substr($NextAlarmTime,0,2),$mday,$month,$year,$wday,$yday,$isdst);
>  my $NextAlarmTimePM = $NextAlarmTimeP + $Poffset * 60;
>      my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst)
> = localtime($NextAlarmTimePM);
>  my $NextAlarmTimePHM = $Phour.':'.$Pmin;
>       # Rückgabe der ersten aktiven Weckzeit als Text
>   if ($PreturnMode =~ /next full/) {
>   @FAArraySort = sort(@FAArray);
>      $ReturnText = $FAArraySort[0].' Min. => '.$NextAlarmTimePHM
>     }
>  else {$ReturnText = $NextAlarmTimePHM};
>  }
>  
>  # ggf. Fehlermeldung
>  else {
>   $ReturnText = "\'Bsp.: FB_NextAlarmClockTime(\'next\',-10) Werte für
> den 1. Parameter sind: all, sort, next full, next; Der 2. Parameter muss
> eine positive oder negative Zahl sein."
>  };
>
>
>     return $ReturnText;
>    
>   }
>
> #Ende
> 1;
>
> Viel Spaß beim Testen. Ich hoffe es funktioniert.
>
> LaLeLu
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Andreas,

Am Dienstag, 20. November 2012 19:15:00 UTC+1 schrieb Andreas Schaller:
>
> Klingt sehr wie bei der Zuhausefunktion über WLAN.


Ja danke, so muss es gehen. Das ist eleganter. Ich komme noch nicht dazu,
es jetzt zu realisieren.

Was ich nicht verstehe ist warum da alle 30 min den Alarm überprüfen
> willst. Fuer mich wuerde 1 mal täglich reichen e.g. um 1 Uhr Nachts werden
> alle (3) Alarme für den nächsten Tag scharf geschaltet.

 
Das ist die sichere Variante, die fast alle evtl. Nutzungsmöglichkeiten
abdeckt (Der Wecker muss ja nicht nur wecken.). Ich kann aber auch jede
andere Einstellung verstehen.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com