Hallo liebe Leute,
ich bin noch ein Anfänger mit fhem und auch mit Perl hab ich mich bisher noch nicht so ausgiebig beschäftigt.
Dennoch hab ich ein Projekt angefangen, das eigentlich einer einfachen Alarmanlage dienen soll, die folgendermaßen funktioniert.
Es existieren HM-Tür/Fenster-Kontakte, die beim (unbefugten, also nach Einschalten der Alarmanlage) Öffnen die Bewegungserkennung der vorhandenen Überwachungskameras einschalten sollen.
So weit so gut. Das habe ich eigentlich schon soweit hinbekommen, dass das einigermaßen läuft. Allerdings bin ich jetzt mit einer meiner Perl-Funktionen auf ein Problem gestoßen, das ich mir nicht so recht erklären kann.
Ich hab eine Funktion, die alle Kameras entweder scharf schalten soll, oder dass man die Bewegungserkennung beim Abschalten der "Alarmanlage" ausschaltet.
die Funktion ( sie ruft zwei Unterfunktionen auf) lautet:
<code>
sub allekameras($){
my $schalter = @_;
my %cams=get_conf();
for my $cam (keys %cams){
kamera($cam,$schalter);
}
}
</code>
Der Schalter ist 0|1
Die Unterfunktion holt aus einer Konfigurationsdatei den Namen der Kamera und das dazugehörige Passwort.
Die Unterfunktion kamera schaltet dann alle Kameras (Parameter 0 oder 1) scharf/nicht scharf.
Problem: Ich kann der Funktion allekameras egal welche Parameter übergeben aufrufen, sie kommen aber immer als eine 1 (hab ich im log überprüft) an, d.h., ich kann die Bewegungserkennung der Kameras nicht abschalten. Ich hab sogar versuchshalber probiert einen String übergeben, die Funktion empfängt aber immer eine 1.
Die Definition in Fhem lautet:
define Alarmanlage.off notify Alarmanlage:off {fhem("set Alarm off");;allekameras(0)}
Ich bin ratlos
Gruß
Bitgulli
es muss my ($schalter) = @_;
heissen. die klammern sind wichtig.
ohne wird das array der übergebenen werte im skalar kontext ausgewertet. das ist dann die anzahl der elemente. bei dir immer eine 1 weil ein parameter übergeben wird.
mit wird das array im list kontext ausgewertet. in diesem fall werden dann die ersten n elemente der arrays den ersten n variablen der liste zugewiesen.
gruss
andre
Vielen Dank für die schnelle Antwort.
Manchmal übersieht man die einfachsten Dinge >:(. Jetzt läuft's :).
Viele Grüße
bitgulli