For-Schleifen bzw. Anzahl Wiederholungen?

Begonnen von heikoh81, 21 Juni 2014, 09:40:03

Vorheriges Thema - Nächstes Thema

heikoh81

Hallo zusammen,

ich steuere u.a. mittels pilight über 433Mhz einige Pollin-Funktsteckdosen.
Je nach räumlicher Entfernung zum Raspi habe ich herausbekommen, dass man den Schaltbefehl ggf. mehrmals kurz hintereinander senden muss, damit der Aktor ihn mitbekommt.

Hierzu habe ich nun eine 99MyUtils-Funktion geschrieben, die je nach Parameter den Befehl unterschiedlich oft sendet.
Allerdings finde ich das "nicht ellegant".

Gibt es in FHEM auch die Möglichkeit für Schleifen?
Dann könnte ich einfach den Befehl in Abhängigkeit des Parametes x mal wiederholen.
Habe hierzu auch über Google nichts gefunden.

Vielel Grüße,
Heiko


#Routine fuer Pollin-Steckdosen
#heikoh, 18.06.2014
#Parameter-Reihenfolge
# 1) Systemcode (=Fernbedienungscode) der Steckdose, z.B. "15" (mit Anführungsstrichen)
# 2) Unitcode (=Steckdosencode) der Steckdose, z.B. "2" (mit Anführungsstrichen)
# 3) on oder off, z.B. "on" (kleingeschrieben, mit Anführungszeichen)
# 4) Anzahl der Sendewiederholungen, z.B. "3" (mit Anführungsstrichen), maximal 5
# 5) Protokoll, mit Anführungszeichen
sub SchaltePollin($$$$$) {
my ($Systemcode, $Unitcode, $Schalthandlung, $AnzahlWiederholungen, $Protokoll) = @_;
  if ( $AnzahlWiederholungen == 1 ) {
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    Log 3, "Befehl ".$Schalthandlung." wurde 1x an Pollin ".$Systemcode."-".$Unitcode." gesendet";
  }
  if ( $AnzahlWiederholungen == 2 ) {
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    Log 3, "Befehl ".$Schalthandlung." wurde 2x an Pollin ".$Systemcode."-".$Unitcode." gesendet";
  }
  if ( $AnzahlWiederholungen == 3 ) {
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    Log 3, "Befehl ".$Schalthandlung." wurde 3x an Pollin ".$Systemcode."-".$Unitcode." gesendet";
  }
  if ( $AnzahlWiederholungen == 4 ) {
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    Log 3, "Befehl ".$Schalthandlung." wurde 4x an Pollin ".$Systemcode."-".$Unitcode." gesendet";
  }
  if ( $AnzahlWiederholungen == 5 ) {
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    system("sudo /usr/local/bin/pilight-send -p ".$Protokoll." -P 5000 --systemcode=".$Systemcode." --unitcode=".$Unitcode." --".$Schalthandlung);
    Log 3, "Befehl ".$Schalthandlung." wurde 5x an Pollin ".$Systemcode."-".$Unitcode." gesendet";
  }
}

betateilchen

Zitat von: heikoh81 am 21 Juni 2014, 09:40:03
Hierzu habe ich nun eine 99MyUtils-Funktion geschrieben, die je nach Parameter den Befehl unterschiedlich oft sendet.
Allerdings finde ich das "nicht ellegant".

Doch, das ist der einzige richtige und sinnvolle Ansatz.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Puschel74

Hallo,

Perl kennt Schleifen.
FHEM ist in Perl geschrieben und du kannst ganz normales Perl in deinen Codes (in irgendwas.pm) verwenden.

ZitatHabe hierzu auch über Google nichts gefunden.
Glaub ich nicht.
Versuch mal "Perl Schleife" in Google.
103.000 Ergebnisse in 0.24 Sekunden  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.