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";
}
}
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.
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