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
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) }
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
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
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?
Ja, in einem Dummy oder Reading sollte es funktionieren.
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
{fhem("set $NAME hue ".Value("Zufahlszahldummy")}
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
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.
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
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
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")}
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
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
Zitat von: amenomade am 13 September 2019, 20:31:27
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
Alles klar versuche ich aber fehlt da nicht eine ")"
Wenn du ein funktionierendes at und das Setzen des WD hast welches klappt und eine Variante ohne Dummy willst:
poste ein list von beidem (allem was beteiligt ist) und ich bau dann "meine" Variante ohne Dummy draus...
Viel Erfolg, Joachim
Zitat von: MadMax-FHEM am 13 September 2019, 20:39:17
Wenn du ein funktionierendes at und das Setzen des WD hast welches klappt und eine Variante ohne Dummy willst:
poste ein list von beidem (allem was beteiligt ist) und ich bau dann "meine" Variante ohne Dummy...
Viel Erfolg, Joachim
danke gerne aber der WD scheitert noch
Zitat von: amenomade am 13 September 2019, 20:31:27
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
define Test WeekdayTimer hueBridge1_HUEDevice5 012345678|20:37|xx {fhem("set $NAME hue ".Value("Zufahlszahldummy"))}
bringt für meine Testlampe hinter mir keinen Erfolg leider
der dummy hat den Wer 32575 oder sowas
List:
Internals:
FUUID 5d7bdb0a-f33f-1dc2-1d43-6a24365f1f83d562
NAME Zufallszahldummy
NR 1445
STATE 36869
TYPE dummy
READINGS:
2019-09-13 20:08:24 state 36869
Attributes:
Zitat von: Dia81 am 13 September 2019, 20:39:57
danke gerne aber der WD scheitert noch
Da vertraue ich mal auf amenomade! :) ;)
Bzw. vielleicht komme ich auch noch dazu mal zu kucken...
Daddel grad nur auf dem Handy und kann nicht testen...
Gruß, Joachim
ich sehe gerade den fehler, man sollte richtig schreiben können... neuer Test. ES KLAPPT DANKE!!!!!!!
define Test WeekdayTimer hueBridge1_HUEDevice5 012345678|20:37|xx {fhem("set $NAME hue ".Value("Zufahlszahldummy"))}
In deinem Versuch fehlen Anführungszeichen und du musst welche die da sind "escapen"!!
Gruß, Joachim
Zitat von: Dia81 am 13 September 2019, 20:40:51
bringt für meine Testlampe hinter mir keinen Erfolg leider
Wie stellst Du das fest?
Mal in Log geschaut?
"list" vom WD bitte
Was ergibt
{fhem("set hueBridge1_HUEDevice5 hue ".Value("Zufahlszahldummy"))}
in der Kommandozeile?
Zitat von: amenomade am 13 September 2019, 20:44:45
Wie stellst Du das fest?
Mal in Log geschaut?
"list" vom WD bitte
Was ergibt
{fhem("set hueBridge1_HUEDevice5 hue ".Value("Zufahlszahldummy"))}
in der Kommandozeile?
läuft danke ... Rechtschreibfehler grml...Zufahl - Zufall- Danke für deine Geduld!
Ich denke der Teil von WD müsste so lauten:
{fhem("set $NAME hue ".Value(\"Zufahlszahldummy\"))"}
Weil ja der fhem Aufruf so geht:
fhem"fhem-Befehl")
D.h. es muss alles innerhalb der Klammern des fhem-Aufrufs als String bzw. innerhalb von " " sein...
EDIT: auch interessant! Was ich heute noch alles so lerne... ;) Danke amenomade! :)
Gruß, Joachim
Zitat von: MadMax-FHEM am 13 September 2019, 20:48:22
Ich denke der Teil von WD müsste so lauten:
{fhem("set $NAME hue ".Value(\"Zufahlszahldummy\"))"}
Weil ja der fhem Aufruf so geht:
fhem"fhem-Befehl")
D.h. es muss alles innerhalb der Klammern des fhem-Aufrufs als String bzw. innerhalb von " " sein...
Gruß, Joachim
Ne, da ist nichts zu escapen.
Zitat von: amenomade am 13 September 2019, 20:49:29
Ne, da ist nichts zu escapen.
Aber wäre doch "sauberer" und müsste aber auch gehen!?
Aber stimmt, Perl ist da sehr gnädig bzgl. "Variablen-Typen" etc. ;)
Danke, Joachim
Zitat von: MadMax-FHEM am 13 September 2019, 20:39:17
Wenn du ein funktionierendes at und das Setzen des WD hast welches klappt und eine Variante ohne Dummy willst:
poste ein list von beidem (allem was beteiligt ist) und ich bau dann "meine" Variante ohne Dummy draus...
Viel Erfolg, Joachim
Das AT konnte ich noch nicht testen solte aber einfach sein mit :
List ZufallszahlAT
Internals:
COMMAND {Zufallszahlgen(4000)}
DEF *12:00:00 {Zufallszahlgen(4000)}
FUUID 5d7be40b-f33f-1dc2-f777-a489bf9d7d6b0afc
NAME ZufallszahlAT
NR 1446
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 12:00:00
TIMESPEC 12:00:00
TRIGGERTIME 1568455200
TRIGGERTIME_FMT 2019-09-14 12:00:00
TYPE at
.attraggr:
.attrminint:
READINGS:
2019-09-13 20:46:35 state Next: 12:00:00
Die SUB ist:
sub Zufallszahlgen($)
{
my ($Ausgenommen) = @_;
my $Zufallszahl = int(rand(65000-$Ausgenommen))+$Ausgenommen;
fhem ("set Zufallszahldummy $Zufallszahl");
return $Zufallszahl;
}
Der Weekdaytimer:
Internals:
COMMAND {fhem("set $NAME hue ".Value("Zufallszahldummy"))}
CONDITION
DEF hueBridge1_HUEDevice5 012345678|20:44|xx {fhem("set $NAME hue ".Value("Zufallszahldummy"))}
DEVICE hueBridge1_HUEDevice5
FUUID 5d7bdaed-f33f-1dc2-063e-8071c78fabe2d285
GlobalDaylistSpec
LANGUAGE de
NAME Test
NR 1444
Profil 0: Sonntag 20:44:00 xx
Profil 1: Montag 20:44:00 xx
Profil 2: Dienstag 20:44:00 xx
Profil 3: Mittwoch 20:44:00 xx
Profil 4: Donnerstag 20:44:00 xx
Profil 5: Freitag 20:44:00 xx
Profil 6: Samstag 20:44:00 xx
Profil 7: Wochenende 20:44:00 xx
Profil 8: Werktags 20:44:00 xx
STATE active
STILLDONETIME 0
TYPE WeekdayTimer
.attraggr:
.attrminint:
READINGS:
2019-09-13 20:46:42 currValue xx
2019-09-13 20:46:42 nextUpdate 2019-09-14 20:44:00
2019-09-13 20:46:42 nextValue xx
2019-09-13 20:46:42 state active
SWITCHINGTIMES:
012345678|20:44|xx
TIMER:
Test_SetTimerOfDay:
HASH Test
MODIFIER SetTimerOfDay
NAME Test_SetTimerOfDay
SETTIMERATMIDNIGHT 1
dayNumber:
!$we 8
$we 7
di 2
do 4
fr 5
mi 3
mo 1
sa 6
so 0
helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
SWITCHINGTIME:
0:
20:44:00 xx
1:
20:44:00 xx
2:
20:44:00 xx
3:
20:44:00 xx
4:
20:44:00 xx
5:
20:44:00 xx
6:
20:44:00 xx
7:
20:44:00 xx
8:
20:44:00 xx
longDays:
de:
Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Wochenende
Werktags
en:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
weekend
weekdays
fr:
Dimanche
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
weekend
jours de la semaine
profil:
1:
EPOCH 1568400240
PARA xx
TIME 20:44
TAGE:
0
1
2
3
4
5
6
7
8
profile_IDX:
0:
20:44:00 1
1:
20:44:00 1
2:
20:44:00 1
3:
20:44:00 1
4:
20:44:00 1
5:
20:44:00 1
6:
20:44:00 1
7:
20:44:00 1
8:
20:44:00 1
shortDays:
de:
so
mo
di
mi
do
fr
sa
$we
!$we
en:
su
mo
tu
we
th
fr
sa
$we
!$we
fr:
di
lu
ma
me
je
ve
sa
$we
!$we
Attributes:
commandTemplate set $NAME $EVENT
Zitat von: MadMax-FHEM am 13 September 2019, 20:50:56
Aber wäre doch "sauberer" und müsste aber auch gehen!?
Aber stimmt, Perl ist da sehr gnädig bzgl. "Variablen-Typen" etc. ;)
Danke, Joachim
Ne, wäre nicht sauberer.
Innerhalb {} ist man in Perl
Da ruft man die Funktion fhem mit einem String als Parameter
Dieses String ist eine Konkatenation von "set blabla hue " und das Ergebnis von der Funktion Value()
Es gibt keine verschachtelte Strings
Ok, auch wieder wahr...
Danke, Joachim