Hallo zusammen,
Ich würde mir gern als kleines Schmankerl von AMAD einen Text vorlesen lassen, wenn ich nach hause komme. Das funktioniert über ein
set [i]AMAD_Device[/i] ttsMsg [i]Text zum Vorlesen[/i]
fantastisch.
Da ich jetzt aber nicht jedes Mal den selben Text als Willkommensnachricht hören möchte, suche ich eine Möglichkeit, mehrere Nachrichten anzugeben und diese dann zufällig auszuwählen. Bei meiner Suche bin ich schon über
int(rand ())
gestoßen, aber wie zum Teufel kann ich das umsetzen? Hat jemand eine Idee?
Schreib die Texte in ein Array und lass Dir einen ganzzahligen Wert mit rand() erzeugen, der im Bereich eines gültigen Indexwertes des Arrays liegt. Dann lässt Du Dir Array[zufälligerIndex] vorlesen.
Den Index des letzten Elements bekommt man immer mit
$ende = $#arrayname;
Grüße
Ich wollte das auch mal in Angriff nehmen, als Guten Morgen Text für meine Tochter.
Daher hier ein Beispielcode
#!/usr/bin/perl
use strict;
use warnings;
my @texte;
my $indexend;
my $index;
@texte = ( "Dies ist ein Tesst 0",
"Hier kommt bald was 1",
"Heute ist ein schöner Tag 2",
"Wie soll das nur enden 3",
"Was könnne wie d amachen 4",
"Man so kann das ja nicht gehen 5"
);
$indexend = $#texte;
$index = int( rand( $indexend ) );
printf "\n\n$texte[$index]\n\n";
Hey ihr beiden,
Danke für die schnelle Hilfe! Ich bin jetzt so weit: die Zeilen von Dir, CoolTux, habe ich in die 99_myUtils integriert, natürlich ohne die einleitende Zeile und eingeleitet mit sub myWelcomeText {
Jetzt scheitere ich aber an der Integration des print-Textes ins "set AMAD_FlurDisplay ttsMsg "
Wie kann ich die Ausgabe der sub denn da integrieren?
Wo genau willst Du das denn einbauen?
Wenn Du es einfach nur so aufrufen willst musst Du Dir den Text vorher holen.
Dafür musst Du aber ein return am Ende der sub setzen.
return ('$texte[$index]');
im Notify rufst dann so auf
{
my $randText = myWelcomText();
fhem "set Tablet ttsMsg $randText";
}
Code ungeprüft
Grüße
Also ich bekomme es nicht gebacken. Habe folgendes meiner 99_myUtils.pm hinzugefügt.
sub mymorgentext {
my @texte;
my $indexend;
my $index;
@texte = ( "Guten Morgen 0",
"Moin Moin 1",
"Hoffe wohl geruht zu haben 2",
"Morgen 3",
"Good Morning 4",
"Ausgeschlafen oder Aufgehört 5",
"Ich wünsche einen guten Start in den Tag 6",
"Auf ein neues 7"
);
$indexend = $#texte;
$index = int( rand( $indexend ) );
return ('$texte[$index]');
}
Und in mein Notify folgendes
my $randText = mymorgentext();
fhem "set TTS_Alle $randText";
Aber raus kommt dann
$texte[$index]
Die variablen werden nicht befüllt.
sub mymorgentext {
my @texte;
my $indexend;
my $index;
@texte = ( "Guten Morgen 0",
"Moin Moin 1",
"Hoffe wohl geruht zu haben 2",
"Morgen 3",
"Good Morning 4",
"Ausgeschlafen oder Aufgehört 5",
"Ich wünsche einen guten Start in den Tag 5",
"Auf ein neues 5"
);
$indexend = $#texte;
$index = int( rand( $indexend ) );
my $text=$texte[$index];
return $text;
}
Vielen Dank, jetzt funktioniert es.