Module: TALKTOME & TALKTOUSER - Sprachverarbeitung für Nutzerinteraktionen

Begonnen von SirUli, 21 Juni 2016, 22:21:13

Vorheriges Thema - Nächstes Thema

RoBra81

Guten Morgen,

Zitat von: SirUli am 04 Juli 2016, 16:41:18
Hi Ronny,

prinzipiell nutzt mein Modul nur msg um Befehle zurück zu senden. In der TALKTOUSER steht diese Zeile:
fhem("msg $device $msgPriority $msgTitle $msgMessage");

Mein Verständnis wäre, dass das msg Modul dann sich ansieht, was der default Pfad für das gewünschte Gerät wäre und diesen dann wählt. Allerdings sehe ich hier auch, dass default "text" als Receiver vergeben wird, falls nicht explizit was anderes gewählt wird. Hätte vermutet, dass man am Zieldevice was setzen kann - das muss ich mir nochmal genau ansehen. Du hast aber recht - aktuell geht es nicht über eine Konfiguration an meinem Modul(en).

Durch Konfiguration geht's leider nicht, aber ich denke, ich habe eine einfache Möglichkeit gefunden (kann es leider gerade nicht testen) indem man die obene genannte Zeile durch folgende ersetzt:

fhem("msg audio|text $device $msgPriority $msgTitle $msgMessage");


Dann brauche ich für AMAD nur noch die Möglichkeit, im Attribut receiveVoiceDevice ein Reading anzugeben, dessen Wert verwendet werden soll...

Ronny

RoBra81

Zitat von: RoBra81 am 05 Juli 2016, 15:58:48
Hallo Uli,

ich hoffe, dass es in deinem Sinne ist: da ich die Tage meine Beispiele veröffentlichen will, habe ich mit deinen Infos mal ein Wiki angelegt: http://www.fhemwiki.de/wiki/TALKTOME_%26_TALKTOUSER_-_Sprachverarbeitung_f%C3%BCr_Nutzerinteraktionen

Ronny

So, jetzt sind auch die ersten Beispiele drin...

SirUli

Hi Ronny,

Zitat von: RoBra81 am 05 Juli 2016, 15:58:48ich hoffe, dass es in deinem Sinne ist
Ist es :) Vielen Dank! Ich verweise aus meinem ersten Eintrag einfach ins Wiki - top!

Zitat von: RoBra81 am 06 Juli 2016, 08:08:10Indem man die obene genannte Zeile durch folgende ersetzt:
fhem("msg audio|text $device $msgPriority $msgTitle $msgMessage");
Ich frage mal beim Author von msg nach ob man da nicht einen Default Wert setzen kann. Ich tippe mal ja ;) Ansonsten muss ich mal schauen wie man das am besten realisiert.

Viele Grüße,
Uli

SirUli

Hi zusammen,

update:
* Added possibility to load a complete directory with rivescript files (ending .rs or .rive) through attribute rsbraindir
* Fixed logging of helper functions


Die helper funktionen können nur mittels attr global verbose 5 gedebugged werden. Hintergrund ist, dass rivescript in dem Moment nichts von FHEM weiss. D.h. leider auch nicht in welchem Gerät es ist.

Und rsbraindir erlaubt nun das laden eine Verzeichnisses - default wäre ./FHEM/TALKTO.

Viele Grüße,
Uli

kud


Christoph

Auch von mir ein wenig OT :P. Könnte jemand seine Konfiguration mit Telegram und msg posten? Ich bin glaub zu blöde das hinzubekommen  >:(
Gruß Christoph

RoBra81

Hallo Christoph,

msg kann Telegram von Haus aus und zur Einrichtung von Telegram gibt's glaube ich ein Wiki...

Ronny

SirUli

Zitat von: kud am 08 Juli 2016, 19:27:00
OT. Aber kennt Jemand die API.ai?

Habe ich auch gesehen aber ich wollte etwas was bei mir auch "offline" und mit FHEM funktioniert - insofern die wahl zu Rivescript. Evtl. könnte man in das vorliegende Modul da andere Befragungsmöglichkeiten noch integrieren. Etwa wie Alexa oder API, welche dann per Befehl bei Bedarf befragt werden.

Cori

Hallo Uli,
bin begeistert von dem Modul. Bin gerade dabei meinen Perlcode der zwar weitaus mächtiger, aber doch extrem unübersichtlich ist.
Leider funktionierte der Perl-Aufruf nur ohne Parameter. Wenn man den Sub normal über sub("") aufruft, kommen sogar Fehler.
Also habe ich mir mal den Code angeschaut und ein paar Änderungen vorgenommen.
Der Aufruf über RiveScript lautet somit <call>perl subname parameter1 parameter2 ...</call>
Für die Dokumentation wird $command mit Subname#P1,P2,... gesetzt, aber nicht mehr für den Aufruf benutzt.

Denke, kannst du so übernehmen, bei mir läuft es so vernünftig.


# Wrapper function for calling perl functions
sub TALKTOME_helpers_perl(@) {
# A sub always gets the bot as first argument - we'll just remove that
shift(@_); 
my $psub = shift(@_);
my $command = $psub . '#' . join(',', @_);

# At this point, rivescript just calls a method but has no idea about fhem devices.
# Therefore to debug this function, you need to set the vorbosity level 5 on the "global" device
Log3 undef, 5, "TALKTOME: called function TALKTOME_helpers_perl with command: $command";

my $result = "If you see this text, then something went seriously wrong";
# Now we'll call the perl function and then give it's result back. As we do not trust the perl stuff
# some error handling is required. Source: https://stackoverflow.com/questions/10342875
eval {
$result = &{\&{$psub}}(@_);
};
if (my $e = $@) {
$result = "Something went wrong: $e";
}

return $result;
}


Noch eine Frage zur Speicherung der ReadingsVal-Aufrufe. Ich bekomme die calls normal angezeigt bei einer Ausgabe. Aber eine direkte Speicherung in einer Variable ohne Anzeige bekomme ich einfach nicht hin. Denke ich hier falsch? Mein Aufruf <set reading=<call>readingsval Name reading FEHLER</call>>

Vielen Dank schon mal
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

SirUli

Hi Cori,

Zitat von: Cori am 12 Juli 2016, 05:07:47bin begeistert von dem Modul.
Danke ;)

Zitat von: Cori am 12 Juli 2016, 05:07:47Leider funktionierte der Perl-Aufruf nur ohne Parameter.
Interessantes Problem - muss ich mir mal ansehen. Denn eigentlich sollte das nicht so sein. Deine Lösung gefällt mir erstmal :)

Edit: Nachvollziehbar dass es so ist - ich baue das um ;)

Zitat von: Cori am 12 Juli 2016, 05:07:47
Denke ich hier falsch? Mein Aufruf <set reading=<call>readingsval Name reading FEHLER</call>>
Ich denke nicht dass du da falsch liegst, dieser Weg sollte klappen. Ich schau mir das mal an - evtl. muss ich das an den RiveScript-Author übergeben.

Viele Grüße,
Uli

Christoph

Zitat von: RoBra81 am 09 Juli 2016, 17:14:06
Hallo Christoph,

msg kann Telegram von Haus aus und zur Einrichtung von Telegram gibt's glaube ich ein Wiki...

Ronny

Danke Ronny  :)

devil77

Hallo,

wollte jetzt das ganze auch mal probieren. Scheinbar hat erstmal alles soweit funktioniert was die Einrichtung angeht.
Aber beim erstellen der eigenen Befehle komme ich nicht weiter. Mein Code zum testen sieht bisher so aus
! sub hauptmenü = hauptmenue

+ [*] (abbrechen|hauptmenue) [*]
- Hauptmenü:
^ /CapuAn
^ /CapuAus

+ CapuAn
- Befehl abgesetzt <call>fhem set WZ.Power.CapuBar_Sw_Schalter on</call>
^ Aktueller status: <call>readingsval WZ.Power.CapuBar_Sw_Schalter state Error</call>

+ CapuAus
- Befehl abgesetzt <call>fhem set WZ.Power.CapuBar_Sw_Schalter off</call>
^ Aktueller status: <call>readingsval WZ.Power.CapuBar_Sw_Schalter state Error</call>

+ leave
- Untermenü verlassen \n \s \n {@ hauptmenue}


Sende ich über telegram die Nachricht "Hauptmenü" ab dann erhalte ich folgende Antwort
Hauptmenü:/CapuAn/CapuAus
Schon einmal alles zusammen geschrieben und ich kann damit die einzelnen Befehle nicht anklicken.

Schicke ich jetzt folgenden Befehl zurück
/CapuAn
Dann erhalte ich nur ein
Ich konnte leider keine gute Antwort finden!

Momentan stehe ich etwas auf dem Schlauch und weiß nicht wo da mein Fehler liegt.

RoBra81

Hallo,

da scheint ein Fehler zu sein, den ich auch des Öfteren mache: in JiveScript werden alle Anfragen zunächst in Kleinbuchstaben umgewandelt, sodass du

+ CapuAn
- Befehl abgesetzt <call>fhem set WZ.Power.CapuBar_Sw_Schalter on</call>
^ Aktueller status: <call>readingsval WZ.Power.CapuBar_Sw_Schalter state Error</call>


in

+ capuan
- Befehl abgesetzt <call>fhem set WZ.Power.CapuBar_Sw_Schalter on</call>
^ Aktueller status: <call>readingsval WZ.Power.CapuBar_Sw_Schalter state Error</call>


ändern musst.

Bei dem Hauptmenü muss du noch entweder explizite Zeilenumbrüche setzen, oder die impliziten vorher an und anschließend ausschalten:

+ [*] (abbrechen|hauptmenue) [*]
- Hauptmenü: \n
^ /CapuAn \n
^ /CapuAus


oder

+ [*] (abbrechen|hauptmenue) [*]
! local concat = newline

- Hauptmenü:
^ /CapuAn
^ /CapuAus

! local concat = none


Ronny

devil77

Danke für die Tips, dass mit dem Zeilenumbruch funktioniert.
Aber auch mit Kleinschreibung wird der Befehl nicht umgesetzt.

RoBra81

Hast du mal

CapuAn

gesendet?

Wenn das geht, musst du vermutlich noch das Attribut rspunctuation setzen:

attr FHEMTALKTOME rspunctuation .,!?;:¡¿/

Ronny