Variable aus 99_my in Fhem nutzen

Begonnen von Dia81, 13 September 2019, 19:21:02

Vorheriges Thema - Nächstes Thema

Dia81

So da ich es jetzt schaffe eine Zufallszahl zu genrieren möchte ich diese auch gerne in FHEM nutzen aber irgendwie kriege ich das nicht hin:


sub Zufallszahlgen($)
{
our ($Ausgenommen) = @_;
our $Zufallszahl = int(rand(65000-$Ausgenommen))+$Ausgenommen;
return $Zufallszahl;
}


Jetzt möchte ich eine Hue schalten

set HUELampe1 hue $Zufallszahl - Farbe wird nicht angenommen (Stadard Rot wird geschaltet)
set HUELampe1 hue {$Zufallszahl} - Farbe wird nicht angenommen (Stadard Rot wird geschaltet)
{fhem ("set HUELampe1 hue $Zufallszahl")} - führt zu Fehlermeldung das $Zufallszahl in line 1 nicht definiert ist

funktionieren aber als test nicht. Was mache ich hier falsch oder wie nutze ich die Variable richtig? Möchte Sie dann in einem Weekdaytimer nutzen. Kriege es mit Hilfe und Wiki irgendwie nicht geregelt gerade

amenomade

In Perl ist eine Variable nur in Ihrem "lexical scope" verfügbar. $Zufallszahl wirdst Du nicht benutzen können.

Was Du aber machen kannst, ist die Funktion zu rufen:
set HUELampe1 hue { Zufallszahlgen(2500) }

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

#2
Wo rufst du den set Befehl denn auf?

Es muss wo sein, wo du Perl verwenden kannst...

D.h. du brauchst einen Perl-Teil vorne weg wo du eben deine Sub aufrufst und dann den Rückgabewert in eine Variable übernimmst (oder direkt in den set die Sub aufrufst, bin mir aber sicher, dass du direkt im set kein Perl verwenden kannst) und das dann in den set "einbaust"...

{
my $value=Zufallszahlgen(Ausanahme);
fhem("set HUELampe1 hue $value");
}

Und das dann eben dort hin, wo du deine bisherigen Versuche hingeschrieben hattest...

Die Variable $Zufallszahl ist ja nur innerhalb deiner Sub "gültig"...

EDIT: interessant, wollte die Variante auch schon schreiben, wusste nur (noch) nicht, dass man im set-Befehl auch nur Teile in Perl machen kann... Testen geht grad nicht... Auch wieder was gelernt...

EDIT2: den Namen deiner Sub solltest du noch mal "überdenken"... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Dia81

Zitat von: MadMax-FHEM am 13 September 2019, 19:40:58
Wo rufst du den set Befehl denn auf?

Es muss wo sein, wo du Perl verwenden kannst...

D.h. du brauchst einen Perl-Teil vorne weg wo du eben deine Sub aufrufst und dann den Rückgabewert in eine Variable übernimmst (oder direkt in den set die Sub aufrufst, bin mir aber sicher, dass du direkt im set kein Perl verwenden kannst) und das dann in den set "einbaust"...

{
my $value=Zufallszahlgen(Ausanahme);
fhem("set HUELampe1 hue $value");
}

Und das dann eben dort hin, wo du deine bisherigen Versuche hingeschrieben hattest...

Die Variable $Zufallszahl ist ja nur innerhalb deiner Sub "gültig"...

Gruß, Joachim

Eigentlich in einem Weekdaytimer. Den Set hatte ich als Test in der Kommandozeile genutzt. Die jetztige Zeile einer der beiden Lampen lautet:

define AussenHUE_WD WeekdayTimer hueBridge1_HUEDevice3 012345678|{sunset_abs(-3600)}|xx {fhem("set $NAME hue {(int(rand(55100))+4900)}")}

Da aber eine 2. Lampe die GLEICHE Farbe bekommen sollte kann ich das ja so nicht nutzen da dann beide eine andere Zufallszahl bekommen

Dia81

#4
Zitat von: amenomade am 13 September 2019, 19:39:01
In Perl ist eine Variable nur in Ihrem "lexical scope" verfügbar. $Zufallszahl wirdst Du nicht benutzen können.

Was Du aber machen kannst, ist die Funktion zu rufen:
set HUELampe1 hue { Zufallszahlgen(2500) }

Danke für Die Aufklärung war mir so gar nicht bewusst. Leider brauche ich das für 2 Lampen, deswegen wollte cih einen Zufallswert Mittags bestimmen lassen den ich dann für beide Gleichermaßen nutzenkann. Bei der Variante kriegt jede eine andere Zufallsfarbe. Müsste ich dann aus der SUB raus irgendwie den Wert in ein Dummy schreiben?

sub Zufallszahlgen($)
{
our ($Ausgenommen) = @_;
our $Zufallszahl = int(rand(65000-$Ausgenommen))+$Ausgenommen;
fhem ("set Zufallszahldummy $Zufallszahl")
}


Dann ein Dummy Zufallszahl und dann das Dummy im WD abfragen?

amenomade

Ja, in einem Dummy oder Reading sollte es funktionieren.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Dia81

Zitat von: amenomade am 13 September 2019, 19:51:44
Ja, in einem Dummy oder Reading sollte es funktionieren.

ok danke das klappt, ist jetzt offtopic aber wie würd ich das in einem WD-Timer übergeben? Finde da in der Commandref nichts zu

define AussenHUE_WD WeekdayTimer hueBridge1_HUEDevice3 012345678|{sunset_abs(-3600)}|  Hier müsste ja irgendwie jetzt noch das dummydevice/Reading rein

amenomade

{fhem("set $NAME hue ".Value("Zufahlszahldummy")}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

#8
Wenn du nur einen Dummy hast, dann hast du auch nur einen Zufallswert...

Rufe doch durch ein at (wenn du die Farbe unbedingt Mittags bestimmen willst) die Sub auf.
Erweitere die Sub und gib noch den Lampennanen mit.
Dann setze doch einfach in der jeweiligen Lampe (den Namen hast du ja in der Sub) ein Reading welches du dann abfragst wenn du die Lampenfarbe setzt...

Bzw. kannst du das im at denke ich auch tun, indem du dort deine jetzige Sub aufrufst und den Rückgabewert als Reading in den jeweilgen Lampen setzt...

setreading DeviceName ReadingName Wert

Aber irgendwie klingt bzw. sieht das alles sehr umständlich aus...

Was willst du denn eigentlich tun/erreichen!?

EDIT: ok. Einfach diesen Beitrag ignorieren ;) Du willst denselben zufälligen Wert für beide Lampen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Dia81

#9
Zitat von: MadMax-FHEM am 13 September 2019, 19:58:40
Wenn du nur einen Dummy hast, dann hast du auch nur einen Zufallswert...

Rufe doch durch ein at (wenn du die Farbe unbedingt Mittags bestimmen willst) die Sub auf.
Erweitere die Sub und gib noch den Lampennanen mit.
Dann setze doch einfach in der jeweiligen Lampe (den Namen hast du ja in der Sub) ein Reading welches du dann abfragst wenn du die Lampenfarbe setzt...

Bzw. kannst du das im at denke ich auch tun, indem du dort deine jetzige Sub aufrufst und den Rückgabewert als Reading in den jeweilgen Lampen setzt...

setreading DeviceName ReadingName Wert

Aber irgendwie klingt bzw. sieht das alles sehr umständlich aus...

Was willst du denn eigentlich tun/erreichen!?

EDIT: ok. Einfach diesen Beitrag ignorieren ;) Du willst denselben zufälligen Wert für beide Lampen...

Gruß, Joachim

Puh ja hört sich kompliziert an.

Ich möchte das zwei HUE Lampen eine zufällige Farbe bekommen, jeden Tag. Aber beide die selbe. Die bekommen die mit set Lampe hue $Wert.
Da rot Zahlen bis 4000 sind blende ich die beim Zufallswert aus. Maximal Darf der Wert 65000 sein. Also dachte ich das ich zum beispiel mittags um 12 per AT eine Zufallszahl bestimme. Diese dann jetzt in ein Dummy schreibe und dann beim angehen der Lampen über die Weekdaytimer abfrage.  Bis zum letzten Punkt funktioniert das auch. Wenn es darüf oder eine ingesamt einfachere Idee gibt, gerne. Wenn die Übergabe mit dem Tipp von @amenomade geht, dann sollte das eigentlich funktionieren und würde von mir getestet werden.

Dia81

#10
Zitat von: amenomade am 13 September 2019, 19:57:28
{fhem("set $NAME hue ".Value("Zufahlszahldummy")}

Okay probiere dann mal

define AussenHUE_WD WeekdayTimer hueBridge1_HUEDevice3 012345678|{sunset_abs(-3600)}|{fhem("set $NAME hue ".Value("Zufahlszahldummy")} 


hat leider keinen effekt bei mir

MadMax-FHEM

#11
Wie geschrieben direkt als Reading "in" die Lampen und dann statt auslesen des Dummy eben direkt bei den Lampen...

Auslesen: ReadingsVal("DeviceName","ReadingName","Ersatzwert") bzw. ReadingsNum("DeviceName","ReadingName",Ersatzwert)

Dann sparst du einen Dummy...

Wie setzt du denn den Weekdaytimer (kenne ich nur dem Namen nach) bzw. wie baust du aktuell das Abfragen des Dummy dort ein?

EDIT: dann eben den Vorschlag von amenomade abwandeln mit ReadingsNum und in der Sub bzw. im at halt dann ein Reading in der jeweiligen Lampe setzen (setreading) statt den Dummy mittels set... Aber wie geschrieben: sparst halt einen Dummy. Ist aber nicht schlimm den zu haben... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Dia81

#12
Zitat von: MadMax-FHEM am 13 September 2019, 20:09:02
Wie geschrieben direkt als Reading "in" die Lampen und dann statt auslesen des Dummy eben direkt bei den Lampen...

Auslesen: ReadingsVal("DeviceName","ReadingName","Ersatzwert") bzw. ReadingsNum("DeviceName","ReadingName",Ersatzwert)

Dann sparst du einen Dummy...

Wie setzt du denn den Weekdaytimer (kenne ich nur dem Namen nach) bzw. wie baust du aktuell das Abfragen des Dummy dort ein?

EDIT: dann eben den Vorschlag von amenomade abwandeln mit ReadingsNum und in der Sub bzw. im at halt dann ein Reading in der jeweiligen Lampe setzen (setreading) statt den Dummy mittels set... Aber wie geschrieben: sparst halt einen Dummy. Ist aber nicht schlimm den zu haben... ;)

Gruß, Joachim

Puh bin durch einander.... ich glaub ich versuche aus euren Tipps das morgen mal in Ruhe zu basteln.

Denn WD nutze ich bisher mit

define AussenHUE_WD WeekdayTimer hueBridge1_HUEDevice3 012345678|{sunset_abs(-3600)}|xx {fhem("set $NAME hue {(int(rand(55100))+4900)}")}

Das mit dem Dummy wäre okay für mich, aber die Übergabe in den WD funktioniert leider bisher nicht also statt dem {(int(rand(55100))+4900)}")} wahrscheinlich

{ReadingsVal("Zufallszahldummy","STATE","1")}

MadMax-FHEM

Wenn die Übergabe von dem Dummy wie amenomade geschrieben hat nicht geht, dann geht auch "meine" Variante (ohne Dummy) nicht...

Wenn das mit Dummy geht, dann sollte die Variante ohne Dummy einfach sein...

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

Zitat von: Dia81 am 13 September 2019, 20:16:26
Puh bin durch einander.... ich glaub ich versuche aus euren Tipps das morgen mal in Ruhe zu basteln.

Denn WD nutze ich bisher mit

define AussenHUE_WD WeekdayTimer hueBridge1_HUEDevice3 012345678|{sunset_abs(-3600)}|xx {fhem("set $NAME hue {(int(rand(55100))+4900)}")}

Das mit dem Dummy wäre okay für mich, aber die Übergabe in den WD funktioniert leider bisher nicht also statt dem {(int(rand(55100))+4900)}")} wahrscheinlich

{ReadingsVal("Zufallszahldummy","STATE","1")}

Nein
Statt
{fhem("set $NAME hue {(int(rand(55100))+4900)}")}
einfach
{fhem("set $NAME hue ".Value("Zufahlszahldummy")}, wie ich geschrieben habe, aber bitte 1 zu 1 ersetzen, und nicht noch mit igendwelchem pipe (|) dein Kommando mit der Zeitdefinition verbinden. Du nimmst dein WD wie er funktioniert, und erstetzt das Kommando
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus