Stunden und Minuten aus Zeitvariable extrahieren

Begonnen von topfi, 06 März 2015, 10:10:59

Vorheriges Thema - Nächstes Thema

topfi

Hallo,

ich bitte um Hilfe.

Um dem Yamaha-Netzwerkplayer Modul eine Einschaltzeit für den Timer zu übergeben, brauche ich diese im Format

timerHour [0...23]   -   Setzt die Stunde des internen Wake-up Timers
timerMinute [0...59]   -   Setzt die Minute des internen Wake-up Timers

Die Weckzeit befindet sich bei mir in der Variable "Weckzeit", mit der ich bereits das Licht im Schlafzimmer einschalte.
{ReadingsVal("Weckzeit","state","06:00")}

Nun möchte ich beim Ändern der Einschaltzeit des Lichts gleichzeitig den Timer der Yamaha-Anlage mitändern und brauche timerHour und timerMinute getrennt aus der Variable Weckzeit. Wie mache ich das am besten? Gibt es dafür einfache Befehle oder muss ich Zeichenketten auswerten?

Danke.

betateilchen

my ($timerHour,$timerMinute) = split(/:/,$Weckzeit);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

topfi

Super, danke.
Nun weiß ich, wonach ich suchen muss und finde das sogar als Beispiel in der Perl-Referenz.

Eine Frage habe ich noch: Diese Weckzeit, die ich in der FHEM-Oberfläche mittels Slider stelle hat laut Weboberfläche das Format HH:MM. Im auszuführenden "at"" -Befehl sind dann die Sekunden dabei: HH:MM:SS. Ist das wirklich so oder wird nur anders dargestellt?

Wären die Sekunden dabei, würde in Deiner Zeile $timerMinute ein Array sein, das auch die Sekunden enthält, oder? Sollte man also besser schreiben:


my ($timerHour,$timerMinute,$timerSecond) = split(/:/,$Weckzeit);


oder wäre das verkehrt?

betateilchen

Wenn Du das tust und in Deiner Weckzeit keine Sekunden enthalten sind, hagelt es perl-Warnings...

Und $timerMinute ist kein Array.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

topfi

Ok, ich habe es verstanden. Vielen Dank für Deine Hilfe.

topfi

So, jetzt habe ich eine Weile gebastelt und kann das vielleicht dem nächsten ersparen. Falls noch jemand einen Yamaha C560D Netzwerkplayer hat und dessen Timer nach einer in FHEM hinterlegten Weckzeit stellen möchte, so funktioniert es:


#######################################
# Yamaha C560D Timer nach FHEM-Weckzeit einstellen
sub
Yam_Weckzeit_stellen()
{
my ($timerHour,$timerMinute) = split(/:/,ReadingsVal("Weckzeit","state","06:20"));
my $timerRepeat = "every";
my $timerVolume = "12";
   fhem ("set Yamaha_C560D on");
      fhem("set Yamaha_C560D timerHour $timerHour");
      fhem("set Yamaha_C560D timerMinute $timerMinute");
      fhem("set Yamaha_C560D timerRepeat $timerRepeat");
      fhem("set Yamaha_C560D timerVolume $timerVolume");
      fhem("define yam_71 at +00:00:12 set Yamaha_C560D timerSet");
   fhem ("define yam_72 at +00:00:20 set Yamaha_C560D off");
}



Das Yamaha_NP-Modul verlangt, dass erst die Variablen gesetzt werden und dann der Befehl timerSet ausgeführt wird. Mit den angegebenen timings funktioniert das sehr gut. Das setzt nur die Zeit, schaltet aber NICHT den Timer en. Dafür muss extra ein "set Yamaha_C560D timer on" gesendet werden.

Danke Betateilchen für den Tip mit der split-Funktion.