Perl-Befehle mit variablem Wochentagsnamen zusammenfassen?

Begonnen von andies, 24 August 2018, 18:07:46

Vorheriges Thema - Nächstes Thema

andies

Guten Tag, ich muss in Abhängigkeit vom Wochentag manchmal bestimmte Befehle schalten. Diese lauten in FHEM wie folgt

Montags: set Viessmann WW_1Mo_an   und dann 5 Minuten später   set Viessmann WW_1Mo_aus
Dienstags: set Viessmann WW_1Di_an   und dann 5 Minuten später   set Viessmann WW_1Di_aus
usw.

Ich will diese Befehle durch eine Fernbedienung auslösen lassen. Das entsprechende Event wird durch den Anruf einer internen Rufnummer angestoßen, dieses Event wird dann auch ordentlich erzeugt. Mein Problem ist nun das entsprechende Notify. Bisher habe ich das so definiert:

In my_utils gibt es folgende sub
sub WochentagHolen(){
  our %myUtils_wochentagskurzel = (
"0" , "7So",
"1" , "1Mo",
"2" , "2Di",
"3" , "3Mi",
"4" , "4Do",
"5" , "5Fr",
"6" , "6Sa",
);

#Wochentag bestimmen
  my $Wochentagsnummer = strftime('%w', localtime); #0:So 1:Mo 2:Di 3:Mi 4:Do 5:Fr 6:Sa
  return $myUtils_wochentagskurzel{$Wochentagsnummer};
}

Diese Wochentagsnummer liefert den eigentlichen Befehlscode. Der muss aber in einem notify stehen und das habe ich so gemacht:
defmod WarmwasserAn notify TelefonMonitor:external_number:.WarmwasserAn@127.0.0.1 {my $befehl = "set Viessmann WW_".WochentagHolen()."_voll";; fhem($befehl)};; sleep (300);; {my $befehl = "set Viessmann WW_".WochentagHolen()."_norm";; fhem($befehl)}

Die sub in myutils finde ich noch ok. Aber was ich dann mit dem notify mache, scheint mir irgendwie extrem umständlich zu sein. Gibt es da keine elegantere Lösung?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

betateilchen


  • Das ist keine Anfängerfrage
  • Das Zuordnen würde ich nicht mit einem hash lösen, sondern mit einem array
  • Du kannst die gesamte Befehlsausführung in Deinem notify auch in die Funktion Deiner myUtils verlagern, dann musst Du im notify nur noch einmal die Funktion aufrufen
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

andies

Danke! Zu 1: Ich sehe mich als Anfänger, aber es stimmt, so richtig einsortiert ist das nicht.

Ich wusste nicht, dass ich in der my_utils direkt fhem aufrufen kann. Das geht dann mit fhem(" usw"), oder? So wie in https://fhem.de/commandref_DE.html#command beschrieben?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Also so?
sub WarmwasserEinUndAus(){
  my @myUtils_wochentagskurzel = ("7So", "1Mo", "2Di", "3Mi", "4Do", "5Fr", "6Sa");

  my $Wochentagsnummer = strftime('%w', localtime); #0:So 1:Mo 2:Di 3:Mi 4:Do 5:Fr 6:Sa

  fhem("set Viessmann WW_".$Wochentagsnummer."_an");
  fhem("sleep 300");
  fhem("set Viessmann WW_".$Wochentagsnummer."_aus");
}
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

CoolTux

Fast.

fhem("sleep 300; set Viessmann WW_".$Wochentagsnummer."_aus");
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

andies

Kein doppeltes Semikolon innerhalb von fhem(,,...")?


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

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

betateilchen


   my @tage = qw/1Mo 2Di 3Mi 4Do 5Fr 6Sa 7So/;
   my $Wochentagsnummer = $tage[ (localtime(time))[6] - 1 ];
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!