Hallo, irgendwie beiße ich mich fest. Wenn ich in Perl einen einfachen Counter definiere der sich durch ein Event getriggert um 1 erhöht, klemmt es an der definition der counter variablen. Diese muss ich am Anfang der sub definieren also setze ich z.B.
my $counter = 0
das bedeutet aber das bei jedem Aufruf der sub der counter wieder auf 0 gesetzt wird, wie kann ich die Variable deklarieren ohne das der Wert wieder auf 0 gesetzt wird. Zum testen habe ich mir mal folgendes gebaut:
sub Badlicht_counter()
{
my $blvalue = Value("Badlicht");
my $count = 0;
if ($blvalue eq "on") {
$count = $count + 1
}
fhem "set Badlicht_counter $count";
}
VG
Frank
So wird counter immer 1 sein oder 0 bleiben. Aber nie mehr.
Und mach mal
$counter++
$counter++ gute Idee, hatte ich schon aber mit Leerzeichen also als $counter ++, probiere ich mal, jetzt wird das nichts mehr, Frau ist schon genervt das der Rechner noch an ist, heute ist vietnamesisches Neujahrsfest (Tet).
VG
Frank
das wird nicht funktionieren.
Schreib mal in Deine 99_myUtils.pm folgende Zeilen
use vars qw($myCounter);
$myCounter = 0;
und zwar vor die Initialize-routine.
Damit definierst Du eine Variable $myCounter, die Du während der Laufzeit Deines FHEM systemweit verwenden kannst.
Achtung: nach einem FHEM Neustart oder einem Bearbeiten der 99_myUtils.pm steht der Zähler wieder auf 0!
Zitat von: betateilchen am 28 Januar 2017, 23:14:39
das wird nicht funktionieren.
Was genau? Die ganze Funktion oder nur der einfache Zähler der wenn dann nur einmal hoch zählt?
Zitat von: CoolTux am 28 Januar 2017, 23:18:32
Was genau?
Eine Variable, die in einer Funktion definiert wird, steht nur innerhalb der Funktion zur Verfügung und nur solange, wie diese Funktion ausgeführt wird. Danach wird die Variable wieder vernichtet. Deshalb beginnt der Zähler bei jedem Funktionsaufruf wieder mit 0.
Und
$count = $count + 1; bewirkt exakt das gleiche wie
$count++;
Genau das hat meine Frage beantwortet, betateilchen, es geht um die Initialisierung der Variable, wenn das in der Funktion passiert ( dort steht ja my $count = 0) dann ist die Variable bei erneuten Aufruf wieder 0, ich hatte im Netz schon einige Seiten durchsucht aber da ging es immer nur um foreach/while/until Schleifen.
@betateilchen
Danke, funktioniert, im Netz habe ich noch das hier gefunden:
https://books.google.de/books?id=e3AzXyzX7n4C&pg=PA176&lpg=PA176&dq=perl+use+vars+qw&source=bl&ots=3MLtzPLfQa&sig=Amr-fb9ev2AYC2NGhpMrmk-R9i8&hl=de&sa=X&ved=0ahUKEwiKnf63zefRAhXBF5oKHdmqCTgQ6AEISTAH#v=onepage&q=perl%20use%20vars%20qw&f=false