Hauptmenü

Wecker Residents + AMAD

Begonnen von AET_FHEM, 18 April 2017, 11:33:44

Vorheriges Thema - Nächstes Thema

AET_FHEM

Hallo,

ich benutze schon lange residents für meinen Wecker find ich klasse!

AMAD benutze ich auch schon eine Zeit für die Auswertung meiner Tablets und zur Steuerung,
seit kurzem bin ich auch an meinem Handy von Tasker auf Automagik umgestiegen ---> muss ich mich noch dran gewöhnen und meine ganzen Tasks auf Automagik umstellen ....

=> jetzt dachte ich mir Automagik AMAD zeigt ja nextAlarmTime und nextAlarmDay an also könnte ich mein Resident Wecker mit dem Wecker am Handy Synchronisieren
-> also ich geb eine Zeit in Mein Wecker am Handy ein und der stellt dann mein Residents Wecker...

nur wie kann ich den Tag checken ...?

-> Zeit aus AMAD in Residents eintragen ist ja einfach aber ... wie ist das wenn ich am WE nicht geweckt werden will
mein Wecker am Handy kann ja Wochentag oder Wochenende ....

Next Alarm Mo 6:00
Wie weiß FHEM was für ein Tag heute ist?
allerdings sollte er auch Wecker erkennen welche heute klingeln sollen

ich stell mir das so vor ich geh ins Bett = AMAD meldet Dockingstation IO
-> FHEM liest AMAD nextAlarm Time und Day aus
   --> Und trägt dies in Residents ein
->   Dazu sagt er mir
   --> Dein Wecker ist auf 6:00 gestellt (morgen) evtl. noch die Stunden die ich zu schlafen habe sowas wie  Du hast 7 Stunden und 30 Minuten zu schlafen ....
   --> Oder Es ist kein Wecker gestellt (heute & morgen)
   --> Oder Du hast Urlaub oder Morgen ist Feiertag es ist kein Wecker gestellt => das wäre alles kein Problem Kalender ist integriert und FHEM weiß jetzt schon ob Feiertag oder ich Urlaub habe!!

Das Problem ist ich hab keine schöne Idee dafür FHEM zu sagen das Heute (nextAlarmDay) Di ist..

Das einzige was mir einfällt wäre
,,if (($wday == 1)&&("AMAD", "nextAlarmDay" eq "Di"))"
   -> Morgen ist ein Wecker gestellt ...

Gibt es da einen einfacheren Weg?

Grüße
Andy

AET_FHEM

Also nach dem mir niemand geantwortet hat weil ich mich evtl. nicht deutlich genug beschrieben habe hab ich mir jetzt selber was gebastelt :-)

als erstes ein notify welches den Wochentag Mo - So in eine Zahl umwandelt

AMAD_A:powerLevel.* {
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") ne "off"){
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Mo"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 1");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Di"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 2");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Mi"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 3");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Do"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 4");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Fr"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 5");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "Sa"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 6");;}
if (ReadingsVal("AMAD_A", "nextAlarmDay", "") eq "So"){
    fhem("setreading AMAD_A nextAlarmDay_Nr 0");;}
my $WeckerIST = ReadingsVal("AMAD_A","nextAlarmDay_Nr",0);
my $A_Wecker_Tag = $WeckerIST - $wday;
fhem ("setreading AMAD_A nextAlarmIN $A_Wecker_Tag");
my $WeckerISTTime = ReadingsVal("AMAD_A","nextAlarmTime",0);
my $A_Wecker_Zeit = $WeckerISTTime - time;
fhem ("setreading AMAD_A nextAlarm_remain $A_Wecker_Zeit");
}
}


=> hier hab ich mir mal als trigger powerLevel genommen um aktuell wie möglich zu sein, aber damit bin ich noch nicht ganz zufrieden
das notify wandelt den Tag So - Mo in Zahlen 0-6 um (wie in FHEM)
danach checkt er die Tage bis zum nexten wecken Tag Wecker - Heute => das wird in ein ReadingsVal eingetragen (nextAlarmIN)
dann zieht er noch die Zeit next wecker von (JETZT) ab um zu sehen ob der Wecker Heute noch klingeln könnte ...

wenn ich ins Bett gehe habe ich ein Macro gotosleep


Macro_rr_A_gotosleep
{
if ( Value("Urlaub_dummy") eq "ja")
{fhem "set rr_A_wakeuptimer1 nextRun OFF"};
if ( Value("Feiertag_dummy") eq "ja")
{fhem "set rr_A_wakeuptimer1 nextRun OFF"};
my $nextWakeup = ReadingsVal("rr_A","nextWakeup",0);
my $text = "Es ist kein Wecker gestellt. Du könntest verschlafen! Trotzdem eine gute Nacht.";
if ((ReadingsVal("AMAD_A","nextAlarmIN","")eq 1) || (ReadingsVal("AMAD_A","nextAlarmIN","")eq -6))
{
$text = "Dein Wecker ist Morgen auf $nextWakeup Uhr gestellt. Gute Nacht und schlaf gut.";
}
if ((ReadingsVal("AMAD_A","nextAlarmIN","")eq 0) && (ReadingsVal("AMAD_A","nextAlarm_remain","")> 0))
{
$text = "Dein Wecker ist heute auf $nextWakeup Uhr gestellt. Gute Nacht und schlaf gut.";
}
fhem "set AMAD_A ttsMsg $text";


=> hier fehlt mir noch was wenn der Wecker mehrere Tage entfernt ist eine Ansage sowas wie nextAlarmIN nicht 0,1oder 6
außerdem brauch ich noch ne lösung meine Readings Val nextAlarm_remain in eine Urzeit oder besser in Stunden und Minuten umzuwandeln => bis jetzt ist es noch eine Zahl => -1492758805.87183

Aber soweit bin ich bis jetzt mal zufrieden :-)

CoolTux

Meine Freundin aktiviert jeden Abend oder besser gesagt immer dann wenn sie geweckt werden will den Wecker im Handy. Das wertet ein Notify bei mir aus und stellt entsprechend Ihren Residentswecker.
Morgens wenn Sie sich auf awoken stellt (automatisch) oder home (manuell) wird Ihr Wecker deaktiviert (Residents Wecker).
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

AET_FHEM

Hey,

ja so kann das auch funktionieren aber dann muss man ja jeden Abend den Wecker neu stellen, ich stehe jeden Morgen Mo-Fr meistens um dieselbe Urzeit auf meine Frau eher nicht (hier wäre es so zu überlegen)

=> ja genau das fehlt mir noch danke CoolTux ich muss noch nextWakeup in mein Resindent schreiben :-)

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ripper

Zitat von: AET_FHEM am 18 April 2017, 11:33:44
Das Problem ist ich hab keine schöne Idee dafür FHEM zu sagen das Heute (nextAlarmDay) Di ist..

ich beschreibe aktuell zwar nur einen bzw. zwei Dummys mit der Weckzeit die ich dann verwende um meine Rollos am morgen hochzufahren, aber ich hatte einen Codeschnipsel für das Wochentags"Problem" gefunden den ich bei mir eingebaut habe:

sub rollooeffnen($) {
my ($wday) = @_;
my @Wochentage = qw(So Mo Di Mi Do Fr Sa);
my $day = sprintf("%s",
    $Wochentage[$wday],
    );
my $sunrise = sunrise_abs("HORIZON=4");
my $alarmTimeFlo = ReadingsVal('FloHandy','nextAlarmTime','');
my $alarmDayFlo = ReadingsVal('FloHandy','nextAlarmDay','');
my $alarmTimeNessy = ReadingsVal('NessyHandy','nextAlarmTime','');
my $alarmDayNessy = ReadingsVal('NessyHandy','nextAlarmDay','');
my $maxzeit = "10:00:00";
my $zwischenzeit1 = 0;
my $offset = "-600";
my $fahrzeit = 0;
#Wecker Flo stellen
if($day eq $alarmDayFlo) {fhem ("set d_weckerFlo $alarmTimeFlo");
}
else {fhem ("set d_weckerFlo undefined");
}
#Wecker Nessy stellen
if($day eq $alarmDayNessy) {fhem ("set d_weckerNessy $alarmTimeNessy");
}
else {fhem ("set d_weckerNessy undefined");
}
#Zeiten vergleichen
if((ReadingsVal('d_weckerFlo','state','') ne "undefined") and (ReadingsVal('d_weckerFlo','state','') ge $maxzeit)){
   $zwischenzeit1 = $maxzeit;
}
elsif((ReadingsVal('d_weckerFlo','state','') ne "undefined") and (ReadingsVal('d_weckerFlo','state','') ge $sunrise)){
    $zwischenzeit1 = ReadingsVal('d_weckerFlo','state','');
}
else {$zwischenzeit1 = $sunrise}


if((ReadingsVal('d_weckerNessy','state','') ne "undefined") and (ReadingsVal('d_weckerNessy','state','') ge $maxzeit)){
   $fahrzeit = $maxzeit;
}
elsif((ReadingsVal('d_weckerNessy','state','') ne "undefined") and (ReadingsVal('d_weckerNessy','state','') ge $zwischenzeit1)){
    $fahrzeit = ReadingsVal('d_weckerNessy','state','');
}
else {$fahrzeit = $zwischenzeit1}
{Log 3, "[rollooeffnen] -test vorher $fahrzeit "};


$fahrzeit = {timeAdd($fahrzeit,-600)};
{Log 3, "[rollooeffnen] -test nacher $fahrzeit"};


{fhem ("set d_test $fahrzeit")};
#{fhem ("define a_rollooeffnenFahrtzeit at $fahrzeit set TYPE=CUL_HM:FILTER=subType=blindActuator:FILTER=STATE!=auf on");
#}
}                   


Gruss
Flo

AET_FHEM

hey Danke werd ich testen!

wie kann ich Zeitenberechnen zB 7:00 (wecker) minus 15:00 (beispiel Jetzt)

ich find nichts  :(

oder umrechnen in minuten und dann von einander abziehen, wie ich Zeit jetzt in Minuten bekomme weiss ich aber wie kann ich nextAlarmTime in minuten umrechnen => aufteilen in nextAlarmTime_HH und nextAlarmTime_MM ... ????


ripper

Hab meinen PC grad nicht zur Hand...wird sicher morgen abend dann post ich dir was ich habe.
Gruß
Flo

Gesendet von meinem Moto G 2014 mit Tapatalk


AET_FHEM

ja wär super  ;D
=> morgen brauch ich zum glück kein Wecker  8)

ripper

so aber jetzt...

gleich mal ganz kurz vor weg. Ich hab den oben geposteten Code von der falschen stelle kopiert. Dort ist ein Fehler drinnen. Die Log Zeilen waren zum Debuggen drinnen und sind bei mir mittlerweile auskommentiert.
Falsch ist auf jeden Fall die Zeile in der die sub für die Offsetberechnung aufgerufen wird. Hier müssen die Klammern weg. Also so:
$fahrzeit = timeAdd($fahrzeit,-300);
und jetzt der Code dafür:
##################################
#Offset von TimeStrings berechnen
#https://forum.fhem.de/index.php/topic,57519.msg489463.html#msg489463
##################################
sub timeAdd($$){
   my ($t,$offset) = @_;
   my $rueckgabe = 0;
   my @t = split(/:/,$t);
      $t[2] //= 0;
   my $s = $t[0]*3600 + $t[1]*60 + $t[2] + $offset;

   $rueckgabe = sprintf("%02d:%02d:%02d", $s/3600, ($s/60)%60, $s%60);
#   {Log 3, "[timeAdd] $rueckgabe"}
   return($rueckgabe);
}


der Schnipsel kommt aus dem Forum. Link ist eh oben mit drinnen. Dort werden auch noch mehr Möglichkeiten beschrieben.

Ich hoffe ich konnte helfen.
Viele Grüße
Flo

Cooper81

Huhu!
wie weit bist du mit deinem AMAD + Residents Wecker?
Würdest du auch mal eine Anleitung (bzw deine definition) von dem wecker einstellen?
Würde ihn auch sehr gerne nutzen!

gruß
dennis