zufälligen text ansagen

Begonnen von the ratman, 10 Juli 2021, 10:32:45

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

ich steh als nicht-programmierer mal wieder vor einem unlösbaren rätsel. vielleicht kann mir ja geholfen werden?

grundidee: verschiedenen, zufällige texte für verschiedenen situationen als reading bereitstellen
bspl. für eine situation: gute nacht, schlaf gut, träum schön, zeit fürs bett, ... blaaa <-- nur dumme beispiele die ich dann in z.b. einem doif verwenden wollen würde.

am schönsten wäre z.b. einem doif (von mir aus auch n dummy oder was auch immer) in dem dann immer mehrere readings gefüllt werden. jedes reading steht für irgendwas, dass ich brauche, also z.b. ein reading für "gute nacht"-text, eines für regenwarnungs-text, ein weiteres für ...

die ganzen möglichen texte hätte ich am liebsten im selben dummy/doif in je einem attr. untergebracht.

der aufbau ist schon klar, aber wie könnte ich dann random die entsprechenden texte aus dem attr. kriegen und auf möglichst einfachste weise in mein jeweiliges reading schreiben?
vor allem - wie krieg ichs hin, dass ich verschiedene mengen an texten verwenden kann. also z.b. für mein "gute nacht" 3 verschiedene texte, für die regenansage 10 verschiedene texte, usw.?

falls da jemand ne idee hat ... ich wäre echt dankbar.
aber bitte in einfachen worten *g*
→do↑p!dnʇs↓shit←

rudolfkoenig

Im folgenden Beispiel aendert sich der Text alle 11 Minuten.
Mit "set rndText execNow" kann man das manuell beschleunigen.

defmod rndText at +*00:11 {\
  my @gn = ("Gute Nacht", "Schlaf gut", "Träum schön", "Zeit fürs Bett");;\
  setReadingsVal($defs{rndText}, "guteNacht", $gn[rand(@gn)], TimeNow());;\
\
  my @gm = ("Guten Morgen", "Hallo");;\
  setReadingsVal($defs{rndText}, "gutenMorgen", $gm[rand(@gm)], TimeNow());;\
\
  undef\
}

MadMax-FHEM

#2
Willst du die Ansagen in einem Attribut oder Reading?

Oder soll irgendwas bei Bedarf dann erst ein Reading aus den im Attribut hinterlegten Sprüchen in ein Reading schreiben?
(Umständlich)

Also ich mach das mal mit Attributen (geht auch mit Readings, die musst du halt mal mit setreading füllen):


defmod SpruchDummy dummy
attr SpruchDummy userattr mySpruchliste
attr SpruchDummy mySpruchliste Gute Nacht,Schlaf gut,Bis morgen


dann in der Sub die Gute Nacht ansagen soll:


sub GuteNacht()
{
  # einlesen aller Sprüche in ein Array / es dürfen im Spruch halt keine KOMMA vorkommen, sonst eben ein anderes Trennzeichen wählen
  my @Spruchliste = split(/,/, AttrVal("SpruchDummy", "mySpruchliste","n.a."));

  # zufällige Auswahl eines Spruches aus der Liste
  my $Spruch = $Spruchliste[int(rand(@Spruchliste))];

  fhem("set Sprachinstrument $Spruch");
}


Aus verschiedenen Codestücken die ich so verwende zusammengeklopft, also keine Gewähr... ;)

EDIT: es geht nat. auch eine Sub für alle Ansagen, dann brauchst du nur den "Ansagengrund" als Parameter an die Sub übergeben und intern entscheiden welches Attribut genommen wird, um eine zufällige Auswahl aus der passenden Liste anzusagen...

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)

the ratman

#3
vielen dank für die schnellen antworten!

@rudolfkoenig - ginge auch sicher für mich, wobei ich die 11 min änderung nicht brächte - einfach jedes mal was anderes aus dem pool würde auch reichen.

@MadMax-FHEM - attr oder reading ist mir vollkommen egal. muß einfach nur funzen *g* mein obiges gebrabbel war ja nur der versuch meine idee mal grundlegend zu erklären.
generell empfind ichs halt als brauchbar, dann eine art sammelstelle dafür zu haben, da sind userreadings, gleich in deinem dummy sicher recht einfach umzusetzen (ja, das krieg dann sogar ich hin *g*)
scheinbar bin ich allerdings nicht grade der erste mit der idee ...

auf jeden fall hab ich schon mal was zum probieren und es wird warscheinlich schon reichen für mich - danke euch 2!
→do↑p!dnʇs↓shit←

MadMax-FHEM

Gerne.

Wenn nicht, einfach melden... ;)

Ja ich hatte früher auch mal Zufallsansagen, kann Alexa (zumindest für gute Nacht) selber schon und langt mir...
...war noch zu Zeiten des Custom Skills.

Allerdings hab ich das Codestück nicht mehr gefunden ;)
(schon entsorgt)

Daher aus verschiedenen anderen Dingen zusammengestückelt.

In einem Attribut vglbar hier habe ich "Artisten" hinterlegt, die Alexa autom. "skippen" soll...
Mache ich dann mit dem echodevice-Modul.

Neuer Song -> in der "Skipp-Liste"? -> dann den nächsten :)

Viel Spaß, 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)

Beta-User

Falls noch Bedarf besteht: Bei RHASSPY ging es mal um das zufällig Verlesen von Witzen aus einer Datei.

Umformatierten und kommentierten Code kann man hier finden: https://forum.fhem.de/index.php/topic,119447.msg1143414.html#msg1143414. Würde aber vorschlagen, der Funktion gleich den Dateinamen zu übergeben, dann kann man das universell für "Guten Morgen" und "Guten Abend" (...) nutzen ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

thx nochmal!

ich spiel mich hauptsächlich mal mit MadMax-FHEM code. aus mir unerfindlichen gründen versteh ich da mal sogar wie der code gemeint ist ... ist ja bei mir schon eher ein wunder *g*

beta ... dank dir für den link und deinen code. mal schauen, ob ich den auch genug kapiere, um ihn umzubauen. wird ne übung nachdem das alles mal so halbwegs rennt (sonst reiß ich wieder frust auf).
→do↑p!dnʇs↓shit←