Weckzeit anzeigen und einstellen (FritzBox!Fon FHEM webpgm2 )

2,169 views
Skip to first unread message

LaLeLu

unread,
Jan 15, 2012, 11:06:56 AM1/15/12
to FHEM users
Hi fhem-Kundige,

an meiner FritzBox 7390 läuft ein FritzBox!Fon. Ich nutze den Wecker
der FritzBox. Die Weckzeit kann ich am Telefon und im Browser
einstellen. Soweit, sogut.

Nun stelle ich aber auch über fhem 10 Minuten vorher das Radio und
Licht an.

Nun zu meiner Idee:

Ich möchte gerne in fhem (webpgm2) die Weckzeit der FritzBox anzeigen
und einstellen können. Dazu muss ich meiner Meinung nach:

1. Die in der FritzBox eingestellte Weckzeit auslesen können.
2. Die ausgelesene Zeit in webpgm2 anzeigen können.
3. Die angezeigte Uhrzeit editieren können.
4. Die editierte Uhrzeit als neue Weckzeit in der FritzBox einstellen
und
5. den Timer in fhem 10 Minuten früher starten lassen.

Hat jemand schon mal so etwas realisiert oder könnt Ihr mir für Teile
einen Tipp geben?
Trotz Suche finde ich keine Tipps für mein Anliegen. Vielleicht könnt
Ihr helfen.

Danke und Gruss
LaLeLu

ignisquivir

unread,
Jan 15, 2012, 11:34:28 AM1/15/12
to fhem-...@googlegroups.com
Warum lässt Du nicht einfach Dein Telefon zur Weckzeit von fhem anrufen ?
Peter Maier hat dazu das Notwendige unter dem Betreff " FB 7390:
Benachrichtigung wenn Sensor auslöst, per Anruf und/oder VDR OSD Meldung"
veröffentlicht.


Ignisquivir

Fritz!Box 7390 (84.05.07-21400 ), Fhem 5.2 – 7390 SVN, 2xCUL V 1.44 CUL868,
2xHM-LC-Sw4-SM, 1xHM-LCSw1-FM, KS300


LaLeLu

unread,
Jan 15, 2012, 12:20:20 PM1/15/12
to FHEM users
Ja danke, das ist durchaus eine Möglichkeit.

- Ich kann so die Weckzeit nicht am Telefon einstellen.

- Wie stelle ich komfortabel die Uhrzeit über fhem ein? Ich stelle wir
das in etwa so vor, wie ich auch bei einen Dimmer über set die
Helligkeit einstellen kann. Dies wäre überhaupt für alle
zeitgesteuerten Aktionen eine schöne Option der Eingabe. Gibt es dazu
nichts? Laienhaft könnte ich mir z.B. ein Dummy-Device vorstellen,
dass nur zur Speicherung einer Uhrzeit dient.

LaLeLu

David

unread,
Mar 8, 2012, 3:45:35 AM3/8/12
to fhem-...@googlegroups.com
Hallo,

ich würde auch gern den Wecker der FritzBox als "Schalter" benutzen und damit eine Pumpe anschalten, hat niemand eine Idee?

ich komme nicht so recht weiter, letztendlich scheint mir der Wecker nichts anderes als ein (spezieller) Anruf von der FritzBox zu einem bestimmten Telefon zu einer festgelegten Zeit zu sein

Grüße,

David

ilmtuelp0815

unread,
Mar 8, 2012, 1:49:54 PM3/8/12
to fhem-...@googlegroups.com
Hi David!
Gibt es einen speziellen Grund dafür, dass man das nicht gleich in fhem macht?

puschel74

unread,
Mar 8, 2012, 1:55:37 PM3/8/12
to FHEM users
Du kannst doch in fhem einen "Wecker" definieren der dir eine Pumpe
einschaltet.

Grüße

David

unread,
Mar 8, 2012, 2:58:38 PM3/8/12
to fhem-...@googlegroups.com
klar kann ich das, aber der Wecker der Fritzbox wird von meiner Frau jeden Abend per FritzFon neu gestellt (sie arbeitet im Schichtdienst, aber unregelmäßig) 

der Trigger vom Wecker wäre eben ca. 5 min eher (Snooze) als der erste Bewegungsmelder ansprechen würde, ich trigger auch auf den Lichtschalter im Treppenhaus, auch der ist zu spät, die Zirkulationspumpe ist etwas zu schwach ausgelegt

es wäre wenig praktikabel immer einen zweiten Wecker zu stellen und es ist ja einfach auch nicht einzusehen, daß die Daten im selben Gerät nicht abzugreifen sind :-)

ich forsche weiter!

Danke für eure Antworten,

David

unimatrix

unread,
Mar 9, 2012, 9:55:59 AM3/9/12
to fhem-...@googlegroups.com
Mit dem Callmonitor auf der Fritzbox könnte man per Nummerneingabe am Telefon (egal ob Fritzfon oder irgendeins) eine WEckzeit stellen (also nicht den richtigen FB-Wecker) ... vom Callmonitor wird ein Script ausgelöst, was dnan auch was in FHEM absetzen könnte.

Ich nutze das bei mir auch, dabei löst das Einstellen der WEckzeit gleichzeitig aus, dass man jetzt schlafen geht (da wird alles mögliche ausgeschaltet, vorher wird auf dem, falls noch laufenden, Fernseher nochmal die gespeicherte Weckzeit angezeigt.
Message has been deleted

David

unread,
Mar 24, 2012, 2:32:24 PM3/24/12
to fhem-...@googlegroups.com
Nach den Antworten die keine waren mußte ich selbst aktiv werden. Die Lösung sind folgende Befehle in der shell:

für die Weckzeit, Antwort ist so etwas wie "0635" für 6:35 Uhr
ctlmgr_ctl r telcfg settings/AlarmClock0/Time

ob der Wecker aktiv zeigt sich hier mit 0 bzw. 1:
ctlmgr_ctl r telcfg settings/AlarmClock0/Active

keine Ahnung, was das ist:
ctlmgr_ctl r telcfg settings/AlarmClock0/Number

die Wochentage:
ctlmgr_ctl r telcfg settings/AlarmClock0/Weekdays


AlarmClock0 ist übrigens der 1. Wecker, der 2. wird AlarmClock1 sein, usw, 

nun muß ich nur noch aus "0635" eine fhem kompatible Zeit machen (, hat da jemand was zum abgucken?) und das Problem ist gelöst


Grüße,

David

UliM

unread,
Mar 24, 2012, 4:46:08 PM3/24/12
to fhem-...@googlegroups.com
Hi,
klasse dass Du das rausfinden konntest.
Stellst Du's ins Wiki?
Gruß, Uli

unimatrix

unread,
Mar 25, 2012, 5:34:38 AM3/25/12
to fhem-...@googlegroups.com
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

jwk

unread,
Mar 27, 2012, 12:46:01 PM3/27/12
to FHEM users
Tolle Sache, wird bei mir an passender Stelle im Floorplan angezeigt.

ctlmgr_ctl r telcfg settings/AlarmClock0/Number
ist die Nummer, die zum Wecken angerufen wird.

Weiß jemand, wie sich die 'weekdays' enstchlüsseln lassen? Bei mir
erscheinen Zahlen wie 32, 23, 8 für die drei Weckzeiten.

Gruß

Jörg (JWK)

Erwin

unread,
Mar 28, 2012, 4:39:03 AM3/28/12
to fhem-...@googlegroups.com
Bin jetzt nicht an der Fritzbox, daher ohne "Gewähr":

Die Zahlen sind "binär"

2**0 = 1 -> Montag
2**1 = 2 -> Dienstag
2**2 = 4 -> Mi
2**3 = 8 -> Do
2**4 = 16 -> Fr.
2**5 = 32 -> Sa.
2**6 = 64 -> So.

wenn du jetzt z.b. Mittwoch und Donnerstag im Alarm hast, dann muss die Zahl 12 sein....

Wo ich mir jetzt nicht sicher bin ist, ob die Woche mit Montag oder Sonntag anfängt....

l.g erwin

jwk

unread,
Mar 31, 2012, 1:22:08 AM3/31/12
to FHEM users
Hallo Erwin,
Habe empirisch erforscht, dass die Kombination tatsächlich aus
Zweierpotenzen (+1) aufgebaut ist:
1 = Mo
3 = Di
5 = Mi
9 = Do
17 = Fr
33 = Sa
65 = So

Durch Addition der Tageswerte kommt man auf die Tageskombinationen ,
ZB Mo und Di == 4

Es müsste also 127 Kombinationen geben

Gibt es dafür eine Datumsformel in Perl oder Unix? (irgendwie
berechnet AVM das ja auch ... )

Gruß

Jörg

Andy Fuchs

unread,
Mar 31, 2012, 6:47:03 AM3/31/12
to fhem-...@googlegroups.com
Hi Jörg,

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

andy

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

borsti

unread,
Mar 31, 2012, 8:12:26 AM3/31/12
to fhem-...@googlegroups.com
> 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

Jan-Hinrich Fessel

unread,
Apr 2, 2012, 7:14:19 AM4/2/12
to fhem-...@googlegroups.com, Jan-Hinrich Fessel
9 wäre Donnerstag oder Mo+Di+Mi: 1+3+5=9.

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

Grüße
Oskar

David

unread,
May 24, 2012, 2:19:10 AM5/24/12
to fhem-...@googlegroups.com
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?

Andreas Schaller

unread,
Nov 16, 2012, 2:21:41 PM11/16/12
to fhem-...@googlegroups.com
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

UliM

unread,
Nov 17, 2012, 4:13:32 AM11/17/12
to fhem-...@googlegroups.com
mit FB-Weckzeit oder ohne?
Ich nutze timeslider, um die Weckzeit zu setzen.
Sehr komfortabel.
=8-)

Andreas Schaller

unread,
Nov 17, 2012, 7:19:55 AM11/17/12
to fhem-...@googlegroups.com
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.  

UliM

unread,
Nov 17, 2012, 12:34:21 PM11/17/12
to fhem-...@googlegroups.com

UliM

unread,
Nov 17, 2012, 1:09:39 PM11/17/12
to fhem-...@googlegroups.com


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

timeslider.JPG

LaLeLu

unread,
Nov 19, 2012, 3:35:52 PM11/19/12
to fhem-...@googlegroups.com
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

Andreas Schaller

unread,
Nov 19, 2012, 4:04:23 PM11/19/12
to fhem-...@googlegroups.com
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

LaLeLu

unread,
Nov 19, 2012, 4:49:25 PM11/19/12
to fhem-...@googlegroups.com
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

LaLeLu

unread,
Nov 19, 2012, 5:34:22 PM11/19/12
to fhem-...@googlegroups.com
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

Andreas Schaller

unread,
Nov 20, 2012, 1:15:00 PM11/20/12
to fhem-...@googlegroups.com
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.

David

unread,
Nov 20, 2012, 5:04:40 PM11/20/12
to fhem-...@googlegroups.com
Prima!

LaLeLu

unread,
Nov 20, 2012, 5:47:39 PM11/20/12
to fhem-...@googlegroups.com
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.

Andreas Schaller

unread,
Nov 26, 2012, 1:45:16 PM11/26/12
to fhem-...@googlegroups.com
Hallo LaLeLu ,

ich bekomme noch folgende Fehlermeldung aus deiner Routine. Kannst du damit was anfangen ? Danke

Argument "N " isn't numeric in subroutine entry at ./FHEM/99_Utils.pm line 255.
Argument "KE" isn't numeric in subroutine entry at ./FHEM/99_Utils.pm line 255.

UliM

unread,
Nov 26, 2012, 2:04:43 PM11/26/12
to fhem-...@googlegroups.com
Hi,
Vorsicht: 99_Utils.pm wird über update verteilt, damit wird ggf Deine Version überschrieben. (Auch wenn nur selten neue Versionen von 99_Utils.pm kommen).
Würde das an Deiner Stelle nach 99_myUtils.pm schieben.
Gruß, Uli



Am Montag, 26. November 2012 19:45:16 UTC+1 schrieb Andreas Schaller:anke

LaLeLu

unread,
Nov 27, 2012, 7:58:52 AM11/27/12
to fhem-...@googlegroups.com
Hallo Andreas,

nein, leider kann ich dazu nichts sagen. Ich denke, da hast Du beim Ändern irgendwas unpassend gemacht.

Allerdings entwickle und teste ich zur Zeit fleißig weiter. Wenn Du etwas warten kannst? Die nächsten Tage werde ich eine neue Version hier posten.
Dann kommt auch eine separate Funktion zur Zeitberechnung.

Schönen Tag noch
LaLeLu


Am Montag, 26. November 2012 19:45:16 UTC+1 schrieb Andreas Schaller:

LaLeLu

unread,
Nov 28, 2012, 4:34:32 PM11/28/12
to fhem-...@googlegroups.com



Hallo an alle Interessierte,

hier die hoffentlich bugfreie Version zur Übernahme der Weckzeiten von einer FritzBox 7390. Zu anderen kann ich nichts sagen. Ich denke, dass die Kommentare genügende Erklärungen bieten. Hier mal die Ansicht in FHEMWEB:



Schalter
 FBWeckzeit
22:05
FBWeckzeitNextFull
HEUTE ist ein Wecktag, Weckzeit ist MI (22:06) Offset:-10 => 21:56, Telefon: 61, Nr. 2: Aktiv: 1, Wecktage: MI
FBWeckzeitOffset
21:56


In 99_myUtils.pm wird der Code eingetragen:

########################################################################################################
## Ermittelt die nächste Weckzeit aus der FritzBox.                         Erstellt: LaLeLu, 28.11.2012
##
## Eigentlich ist aber anstelle der Weckzeit die Offset-Uhrzeit die relevante Zeit zur Steuerung
## von beliebigen Aufgaben in fhem. Deshalb ist die Steuerung auf die Offset-Uhrzeit ausgelegt.
## Möchte man über die Weckzeit steuern, muss der Offset auf 0 gesetzt werden.
##
## Der 1. Parameter bestimmt die Art der Rückgabe der Funktion. Mögliche Parameter sind:
##  next Offset,next Alarm,next Alarm full,next Offset full,all,Alarms,Offsets
##
## Durch den 2. Parameter wird eine Offset-Uhrzeit ermittelt, die um x Minuten versetzt ist.
## Beispiel: Weckzeit 06:40 => {FB_NextAlarmClockTime('next Offset',-10)} => 06:30
##
##
## Es wird auch die Nr. des Alarms und die Nr. des Telefons ausgegeben.
## Damit können verschiedene Schaltaufgaben gesteuert werden.
## Eingabe Kommandozeile fhem: reload 99_myUtils.pm
##    Aktualisierung auslösen: trigger n_FBWeckzeitAuswerten
## {FB_AlarmClockTimes('next Offset',-10)}
## oder:  {FB_AlarmClockTimes('all',-10)}
##
## Gebrauch z.B. über: define at {FB_NextAlarmClockTime('next',-10)} set lamp on
########################################################################################################

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

    my @FritzAlarmClockTime;
    my @FritzAlarmClockActive; my @FritzAlarmClockActiveJN;
    my @FritzAlarmClockNumber;
    my @FritzAlarmClockWeekdays; my @FritzAlarmClockWeekdaysMod;
    my @AlarmFull;
    my $k; my $i;
    my @Weekdays;
    my $AlarmDay; my $AlarmTime; my $OffsetTime;
  my @ToLate; my @AlarmTimeOrgHM; my @AlarmTimeHM; my @OffsetTimeHM;
    my $ReturnText;

  my %Days = (0,"SO",1,"MO",2,"DI",3,"MI",4,"DO",5,"FR",6,"SA");
    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
    my $myNow = sprintf("%02d:%02d", $hour, $min);
  $AlarmTime  = substr($FritzAlarmClockTime[$k],0,2).":".substr($FritzAlarmClockTime[$k],2,2);
  $OffsetTime = TimeOffset($AlarmTime,$Poffset);
  
  # Check, ob Alarm relevant ist:
  #   - Ist der Alarm aktiv?
  #    - Ist heute ein Wecktag?
  #     - Ist die Weckzeit schon abgelaufen?
      if ($FritzAlarmClockActive[$k] != 1) {
$ToLate[$k]          =  'Weckzeit nicht aktiv ';
$AlarmTimeOrgHM[$k]  =  $AlarmTime;
$AlarmTimeHM[$k]     =  'Nicht aktiv ';
$OffsetTimeHM[$k]    =  'Nein ';
      }
      elsif ($Weekdays[$k] =~ /$Days{$wday}/ or
        $FritzAlarmClockWeekdays[$k] == 1) {
       $AlarmDay = 'HEUTE ist ein  Wecktag';
if ($AlarmTime le $myNow) {
$ToLate[$k]          =  'Weckzeit abgelaufen  ';
$AlarmTimeOrgHM[$k]  =  $AlarmTime;
$AlarmTimeHM[$k]     =  'Nein ';
$OffsetTimeHM[$k]    =  'Nein ';
   }
elsif ($OffsetTime le $myNow) {
$ToLate[$k]          =  'Offsetzeit abgelaufen';
$AlarmTimeOrgHM[$k]  =  $AlarmTime;
$AlarmTimeHM[$k]     =  $AlarmTime;
$OffsetTimeHM[$k]    =  'Nein ';
   }
else {
$ToLate[$k]          =  '         Weckzeit ist';
$AlarmTimeOrgHM[$k]  =  $AlarmTime;
$AlarmTimeHM[$k]     =  $AlarmTime;
$OffsetTimeHM[$k]    =  $OffsetTime;
   };
  }
  else {
   $AlarmDay            = 'HEUTE ist kein Wecktag';
$ToLate[$k]          = 'Weckzeit nicht aktiv';
$AlarmTimeOrgHM[$k]  =  $AlarmTime;
   $AlarmTimeHM[$k]     = 'Kein Wecktag';
   $OffsetTimeHM[$k]    = 'Nein ';
  };

  # Info über die Weckzeit
      if ($FritzAlarmClockActive[$k] != 1) {
       $AlarmFull[$k]    = ('Nicht aktiver Alarm-Nr. '.$k);
      }
  else {
$AlarmFull[$k] = ($AlarmDay.', '.$ToLate[$k].' '.$Days{$wday}.' ('.$AlarmTimeOrgHM[$k].') Offset:'.$Poffset.' => '.$OffsetTimeHM[$k].', Telefon: '.$FritzAlarmClockNumber[$k].', Nr. '.$k.': '.' Aktiv: '.$FritzAlarmClockActive[$k].', Wecktage: '.$Weekdays[$k]);
   $AlarmFull[$k] =~ s/\n//; # Zeilenvorschub entfernen
  };
};


     # Rückgabe aller aktiven Weckzeiten mit kompletter Info
 if  ($PreturnMode =~ /all/)  {$ReturnText      = join("\n", @AlarmFull)}
     # Rückgabe aller Weckzeiten
 elsif  ($PreturnMode =~ /Alarms/)  {@AlarmTimeOrgHM  = sort(@AlarmTimeOrgHM);
   $ReturnText      = join("\n", @AlarmTimeOrgHM)}
     # Rückgabe aller Offset-Uhrzeiten
 elsif  ($PreturnMode =~ /Offsets/) {@OffsetTimeHM    = sort(@OffsetTimeHM);
   $ReturnText      = join("\n", @OffsetTimeHM)}
     # Rückgabe der ersten aktiven Alarm-Zeit
 elsif  ($PreturnMode =~ /next Alarm/)   {@AlarmTimeHM     = sort(@AlarmTimeHM);
     $ReturnText      = $AlarmTimeHM[0]}
     # Rückgabe der ersten aktiven Offset-Zeit
 elsif  ($PreturnMode =~ /next Offset/)  {@OffsetTimeHM    = sort(@OffsetTimeHM);
     $ReturnText      = $OffsetTimeHM[0]}
     # Rückgabe der ersten aktiven Weckzeit als Text
 elsif  ($PreturnMode =~ /next full/)  {@AlarmFull       = sort(@AlarmFull);
          $ReturnText      = $AlarmFull[0]}
 # Bei Fehleingabe
 else  {@OffsetTimeHM    = sort(@OffsetTimeHM);
   $ReturnText      = $OffsetTimeHM[0]};
return $ReturnText;
}


########################################################################################################
## Ermittelt die nächste Weckzeit aus der FritzBox.                         Erstellt: LaLeLu, 26.11.2012
## Berechnet die Offset-Zeit einer Uhrzeit
## Parameter 1: Uhrzeit
## Parameter 2: Offset in Minuten
## Return:      Die Offset-Uhrzeit
## Beispiel: {TimeOffset("09:05",-10)}  oder auch TimeOffset(Value("FBWeckzeitOffset"),-10)
########################################################################################################

 sub TimeOffset($$)
 
  { 
    my $PtimeOrg = shift;
my $Poffset = shift;

    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;

    my $TimeP     = mktime(0,substr($PtimeOrg,3,2),substr($PtimeOrg,0,2),$mday,$month,$year,$wday,$yday,$isdst);
my $TimePM    = $TimeP + $Poffset * 60;
    my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime($TimePM);
my $ReturnText = sprintf("%02d:%02d", $Phour, $Pmin);
  }

#Ende
1;


Die am Ende stehende Funktion kann auch für andere Berechnungen von Zeiten genutzt werden.
Übrigens: Wer auch über Tage hinweg berechnen möchte, kann diese Funktion leicht auch dazu nutzen. Alle Infos stehen dafür zur Verfügung.

Jetzt aber zurück zum eigentlichen Thema.

In fhem.cfg habe ich folgendes stehen. Es funktioniert wie gewünscht. Ich kann damit je nach eingestelltem Telefon verschiedene Aktionen starten. Das Telefon im Schlafzimmer schaltet andere Dinge, als das Telefon im Wohnzimmer.


##############################################################################################
## Das Auswerten der Weckzeit der Fritzbox (7390) regelmäßig auslösen.
## Anstelle von +*01:00:00 kann natürlich auch einfach nur eine Uhrzeit z.B. *{03:00:00} stehen.
##############################################################################################
define t_FBWeckzeitAktRegel at +*01:00:00 {\
{Log 3, ('  t_FBWeckzeitAktRegel:  n_FBWeckzeitAuswerten regelmäßig auslösen.')}\
{fhem("trigger n_FBWeckzeitAuswerten") }\
}
attr t_FBWeckzeitAktualisieren room SYSTEM
attr t_FBWeckzeitAktualisieren group AT

##############################################################################################
## Makro wir gestartet durch: trigger t_FBWeckzeitAktualisieren
## Dies notify erstellt ein AT, das durch Trigger sich selbst wieder
## 1 Min. nach Ablauf der nächsten Offset-Zeit aufruft.
## Damit ist sichergestellt, dass unmittelbar folgende Offset-Zeiten sicher ausgeführt werden.
## Nicht abgefangen werden mehrere identische Weckzeiten. Dieser Fall kann über Telefon: 9 (Alle) gelöst werden.
##############################################################################################
define n_FBWeckzeitAuswerten notify n_FBWeckzeitAuswerten {\
{Log 3, ('  n_FBWeckzeitAuswerten:  Weckzeiten der FritzBox aktualisieren und auswerten.')}\
  {fhem("set FBWeckzeit         ".FB_AlarmClockTimes('next Alarm',-10))  }\
{fhem("set FBWeckzeitOffset   ".FB_AlarmClockTimes('next Offset',-10)) }\
{fhem("set FBWeckzeitNextFull ".FB_AlarmClockTimes('next full',-10))   }\
  if ($defs{"t_AufstehenMuster"}) {\
    {Log 3, ('  n_FBWeckzeitAuswerten: Das existierende t_AufstehenMuster löschen.') }\
    {fhem("delete t_AufstehenMuster") }\
  }\
  if ($defs{"t_FBWeckzeitAktTrig"}) {\
    {Log 3, ('  n_FBWeckzeitAuswerten: Das existierende t_FBWeckzeitAktTrig löschen.') }\
    {fhem("delete t_FBWeckzeitAktTrig") }\
  }\
   if (Value("FBWeckzeitOffset") =~ /NEIN/) {\
{Log 3, ('  n_FBWeckzeitAuswerten:  Kein aktiver Alarm => nichts machen.') }\
}\
else {\
if (Value("FBWeckzeitNextFull") =~ /Telefon: 60/) {\
     {Log 3, ('  n_FBWeckzeitAuswerten: Telefon: 60 (Schlafzimmer) => n_AufstMakroSchlafZi  starten.') }\
{fhem("Define t_AufstehenMuster at ".Value("FBWeckzeitOffset")."  trigger n_AufstMakroSchlafZi") }\
     }\
elsif (Value("FBWeckzeitNextFull") =~ /Telefon: 61/) {\
     {Log 3, ('  n_FBWeckzeitAuswerten: Telefon: 61 (Wohnzimmer) => n_AufstMakroWoZi  starten.') }\
{fhem("Define t_AufstehenMuster at ".Value("FBWeckzeitOffset")."  trigger n_AufstMakroWoZi") }\
     }\
elsif (Value("FBWeckzeitNextFull") =~ /Telefon: 9/) {\
     {Log 3, ('  n_FBWeckzeitAuswerten: Telefon: 9 (Alle) => n_AufstMakroSchlafZi  erstellen.') }\
{fhem("Define t_AufstehenMuster at ".Value("FBWeckzeitOffset")."  trigger n_AufstMakroSchlafZi") }\
     }\
     else {\
         {Log 3, ('  n_FBWeckzeitAuswerten:   Nichts machen.') }\
}\
{fhem("Define t_FBWeckzeitAktTrig at ".Value("FBWeckzeitOffset").":45  trigger n_FBWeckzeitAuswerten") }\
{fhem("attr t_FBWeckzeitAktTrig room SYSTEM") }\
{fhem("attr t_FBWeckzeitAktTrig group AT") }\
}\
}
attr n_FBWeckzeitAuswerten room SYSTEM
attr n_FBWeckzeitAuswerten group NOTIFY


#########################################################################
## AufstehenInDerWoche
#########################################################################
## Makro wird gestartet durch: trigger n_AufstehenMakro
define n_AufstMakroWoZi notify n_AufstMakroWoZi {\
{Log 3, ('  n_AufstMakroWoZi  NOTIFY:  ****** Anfang ******')}\
if( Value("Flur_Wohnungstuer") ne "off") {\
    {Log 3, ('  n_AufstMakroWoZi  Die Wohnungstuer ist offen.') }\
    {fhem("set Kueche_Licht off") }\
    {fhem("set Kueche_Radio off") }\
  }\
  elsif (Value("Flur_Wohnungstuer") eq "off") {\
    {Log 3, ('  n_AufstMakroWoZi  Keine Aktion. Die WohnungsTuer ist abgeschlossen.') }\
  }\
  {Log 3, ('  n_AufstMakroWoZi  NOTIFY:  ****** Ende ******')}\
}

## Makro wird gestartet durch: trigger n_AufstehenMakro
define n_AufstMakroSchlafZi notify n_AufstMakroSchlafZi {\
{Log 3, ('  n_AufstMakroSchlafZi  NOTIFY:  ****** Anfang ******')}\
if( Value("Flur_Wohnungstuer") ne "off") {\
    {Log 3, ('  n_AufstMakroSchlafZi  Die Wohnungstuer ist offen.') }\
    {fhem("set Flur_Licht dim81% 20") }\
    {fhem("set Kueche_Licht on") }\
    {fhem("set Kueche_Arbeitslicht dim75% 15") }\
    {fhem("set Kueche_Arbeitslicht on-till {sunrise(+1800)}") }\
    {fhem("set Kueche_Radio on") }\
    {fhem("setstate ImBett off") }\
    {fhem("set Bad_Heizung desired-temp 20.5") }\
    {fhem("set Kueche_Heizung desired-temp 20.5") }\
    if (Value("KinderDa") ne "on") {\
       {Log 3, ('  n_AufstMakroSchlafZi  NOTIFY:  * Kinder sind nicht da *') }\
       {fhem("set Schlafen_Bett_Licht on-till {sunrise(+1800)}") }\
       {fhem("set Schlafen_Radio on") }\
     } else {\
       {Log 3, ('  n_AufstMakroSchlafZi  NOTIFY:  * Kinder sind da *') }\
       {fhem("set Wohnen_Schrank_Licht off") }\
     }\
  }\
  elsif (Value("Flur_Wohnungstuer") eq "off") {\
    {Log 3, ('  n_AufstMakroSchlafZi  Keine Aktion. Die WohnungsTuer ist abgeschlossen.') }\
  }\
  {Log 3, ('  n_AufstMakroSchlafZi  NOTIFY:  ****** Ende ******')}\
}
attr n_Aufstehen group NOTIFY
attr n_Aufstehen room SCHLAFEN



So, ich hoffe genug erklärt zu haben und damit anderen etwas zu helfen. Falls ihr es für sinnvoll erachtet, kann ich mich auch am Einstellen ins fhemwiki versuchen.

LaLeLu
Message has been deleted

LaLeLu

unread,
Nov 30, 2012, 6:14:14 AM11/30/12
to fhem-...@googlegroups.com
Eine kleine, aber wesentliche Änderung muss man noch vornehmen:
   if (Value("FBWeckzeitOffset") =~ /NEIN/) {\
{Log 3, ('  n_FBWeckzeitAuswerten:  Kein aktiver Alarm => nichts machen.') }\
}\

muss geändert werden in:
   if (Value("FBWeckzeitOffset") =~ /Nein/) {\
{Log 3, ('  n_FBWeckzeitAuswerten:  Kein aktiver Alarm => nichts machen.') }\
}\
Sorry,
LaLeLu

UliM

unread,
Nov 30, 2012, 2:05:23 PM11/30/12
to fhem-...@googlegroups.com
Cool :)
Wiki ! ?
Gruß, Uli

LaLeLu

unread,
Dec 1, 2012, 2:55:49 AM12/1/12
to fhem-...@googlegroups.com
Danke, ich habe noch keinen Wiki-Zugang erhalten. Sobald ich ihn habe, stelle ich es ein.

Heute morgen musste ich noch mal eine Korrektur vornehmen:

      elsif ($Weekdays[$k] =~ /$Days{$wday}/ or
      $Weekdays[$k] eq 'Einmal-Alarm') {
      $AlarmDay = 'HEUTE ist ein  Wecktag';

Gruß
LaLeLu

LaLeLu

unread,
Dec 2, 2012, 6:14:13 PM12/2/12
to fhem-...@googlegroups.com

LaLeLu

unread,
Dec 19, 2012, 2:47:49 PM12/19/12
to fhem-...@googlegroups.com
Ich komme einmal auf meine ursprüngliche Frage vom 15. Januar zurück.
Alle Punkte sind jetzt gelöst und auch im Wiki vorhanden:

Auf meiner FritzBox 7390 läuft ein FritzBox!Fon. Ich nutze den Wecker
der FritzBox. Die Weckzeit kann ich am Telefon und im Browser
einstellen. Soweit, sogut.
... 
Nun zu meiner Idee:

Ich möchte gerne in fhem (webpgm2) die Weckzeit der FritzBox anzeigen
und einstellen können. Dazu muss ich meiner Meinung nach:

1. Die in der FritzBox eingestellte Weckzeit auslesen können.  
2. Die ausgelesene Zeit in webpgm2 anzeigen können.
5. den Timer in fhem 10 Minuten früher starten lassen.   
 
 
3. Die angezeigte Uhrzeit editieren können.  
4. Die editierte Uhrzeit als neue Weckzeit in der FritzBox einstellen. 
 
Diesen Eintrag habe ich gerade neu erstellt.

LaLeLu





Reply all
Reply to author
Forward
0 new messages