Module: TALKTOME & TALKTOUSER - Sprachverarbeitung für Nutzerinteraktionen

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

Vorheriges Thema - Nächstes Thema

SirUli

Zitat von: RoBra81 am 04 Juli 2016, 15:16:22
Ich bräuchte also die Möglichkeit, die Antwort nicht per text (oder push) zu senden, sondern per audio (tts).
Hi Ronny,

mir kam grad noch: hast du mal das attribut "talktouserModSourceDev" auf "audio %DEVICE%" gesetzt?

Viele Grüße,
Uli

RoBra81

Hallo Uli,

Zitat von: SirUli am 22 Juli 2016, 09:48:45
Hi Ronny,

mir kam grad noch: hast du mal das attribut "talktouserModSourceDev" auf "audio %DEVICE%" gesetzt?

Viele Grüße,
Uli

Nein, habe ich nicht, aber ein Blick in den Quellcode lässt vermuten, dass es nicht gehen wird, da du dann ein "@" vor das "audio" setzt:

my $device = "\@" . $modSourceDeviceName;


Die Antwort per Audio habe ich mir durch die Zeile

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


eingebaut, allerdings kann ich das Device aktuell nur fest vorgeben, aber leider noch nicht aus einem Reading ermitteln (was in diesem Fall notwendig wäre)...

Ronny

devil77

Danke, jetzt funktioniert erstmal alles wie gewollt.
Das Thema Punktion hatte ich gelesen konnte es aber noch nichz zuordnen.
Das mit der Kleinschreibung muss ich aber völlig überlesen haben.

Evtl. wären die beiden Punkte noch als Ergänzung im Wiki sinnvoll.

Zitat von: RoBra81 am 21 Juli 2016, 15:33:42
Hast du mal

CapuAn

gesendet?

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

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

Ronny

RoBra81

Zitat von: devil77 am 22 Juli 2016, 09:58:31
Evtl. wären die beiden Punkte noch als Ergänzung im Wiki sinnvoll.

Kann ich gerne bei Gelegenheit nachziehen...

SirUli

Hallo zusammen,

es gibt nun eine neue Version mit den Fixes für die Übergabe von Parametern an die Perl Aufrufe sowie einem geänderten Handling des "@" Zeichens für das %DEVICE% - ist aber transparent für den Nutzer.

@Ronny:
Zitat von: RoBra81 am 22 Juli 2016, 09:56:39
Nein, habe ich nicht, aber ein Blick in den Quellcode lässt vermuten, dass es nicht gehen wird
Verdammt richtig - aber nun ;) Habe den Teil mit dem @ vor den Rivescript Call gelegt. Somit sollte das nun wie vorgeschlagen klappen können?

@Cori:
Zitat von: Cori am 12 Juli 2016, 05:07:47
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>>

ich habe folgenden RiveScript-Code probiert:
+ readingsetcall
- Reading the Reading: <set reading=<call>readingsval KU_SWITCH_COFFEE_Sw state Error</call>>
^ Getting the Reading: <get reading>


Und bekomme korrekterweise folgenden Output:
Reading the Reading:
Getting the Reading: off


Wie sah denn dein Code aus?

Viele Grüße,
Uli

Cori

Hmm, das ist sehr komisch ...

Wenn ich folgenden RiveScript-Code habe:
+ *
- Oh, das konnte ich (noch) nicht deuten. {@user nicht verstanden <star>}

+ user nicht verstanden *
- <set reading=<call>readingsval Telegram msgPeer FEHLER</call>>
^ <call>fhem trigger Meldung.Mail Cori nicht verstandene Nachricht von <get reading>: <star></call>


und Razupaltuff schreibe, bekomme ich über Telegram folgendes:
ZitatOh, das konnte ich (noch) nicht deuten. : razupaltuff</call>
und per Mail (trigger Meldung.Mail ist mein eigener Mail-Service, daran liegt es aber definitiv nicht):
Zitatnicht verstandene Nachricht von <call>readingsval Telegram msgPeer FEHLER

Wenn ich aber den <call> für den FHEM-Befehl weglasse:
- <set reading=<call>readingsval Telegram msgPeer FEHLER</call>>
^ fhem trigger Meldung.Mail Cori nicht verstandene Nachricht von <get reading>: <star>


Erhalte ich korrekter Weise direkt in Telegram (wie von dir getestet):
ZitatOh, das konnte ich (noch) nicht deuten. fhem trigger Meldung.Mail Cori nicht verstandene Nachricht von Cori: razupaltuff

Habe aber keine Ahnung, woran das liegen könnte ...

Noch eine Anmerkung: für das TALKTOUSER-Device funktioniert der querytotarget Befehl nicht für Telegram, wenn man einen Benutzer via Telegram:@peer angibt. Es liegt an der Prüfung in Zeile 271, ob das Device definiert ist, da der komplette Ausdruck und nicht nur das eigentliche Device vor dem Doppelpunkt. Wenn ich diese auskommentiere, klappt es.
Daher mein Vorschlag für diese Zeile:
my $targetDeviceCheck = $targetDevice;
$targetDeviceCheck =~ s/:.*//;
return "set $name querytotarget requires a correct target device" if(!defined($defs{$targetDeviceCheck}));


VG Cori
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

d.schoen

Hallo zusammen, zunächst mal vielen Dank für das Modul. Ich habe es mir vorgestern installiert, komme aber leider nicht wirklich weiter.

Mein TALKTOUSER Modul ist entsprechend konfiguriert und das TALKTOME wird als IODev sauber angezeigt. Die Antworten vom TALKTOME werden auch im TALKTOUSER angezeigt. Soweit passt alles.

Ich würde die Antworten gern an mein TelegramBot Device namens "tgbot" zurückspielen und zwar an meinen Account "@2239....".

Im globalMsg wurden daher hinterlegt:
attr globalMsg msgContactPush tgbot
attr globalMsg msgRecipientPush 2239....


Was stimmt daran nicht? Die Nachrichten kommen leider nicht an. Auch wenn ich manuell ein "msg TALKTOUSER 0 | | Test ausführe geht nix...

Vielen Dank für eure Hilfe.
FHEM 5.7 auf RasPi2
COC 868MHz, Jeelink Clone
Devices: IT, HomeMatic, LaCrosse, ENIGMA2, LG-TV, Thinkingcleaner (iRobot Roomba), LIFX Wifi-Bulbs
Helper: TelegramBot, Homebridge (Siri), Geofency

SirUli

Zitat von: d.schoen am 05 August 2016, 07:18:46
Was stimmt daran nicht? Die Nachrichten kommen leider nicht an.
Hi,
also ich denke da sind ein paar Sachen durcheinander geraten :)

  • Die globalen variablen auf dem globalMsg ziehen nur wenn du eine Nachricht lossendest, die keinen Empfänger hat. Also beispielsweise "msg foo"
  • Wenn du via Telegram kommunizieren willst, solltest du (wie hier beschrieben), die Attribute talktouserMonitorReading sowie talktouserModSourceDev setzen

Für Telegram ist das bei dir wohl so:
attr tgbot talktouserMonitorReading msgText
attr tgbot talktouserModSourceDev %DEVICE%:@%%msgPeerId%%


Hilft dir das?

d.schoen

Danke!

Die Attribute sind aber leider genau so eingetragen. Ich muss ja %%msgPeerId%% und %DEVICE% nicht durch die expliziten Deklarationen ersetzen, oder?
FHEM 5.7 auf RasPi2
COC 868MHz, Jeelink Clone
Devices: IT, HomeMatic, LaCrosse, ENIGMA2, LG-TV, Thinkingcleaner (iRobot Roomba), LIFX Wifi-Bulbs
Helper: TelegramBot, Homebridge (Siri), Geofency

hartenthaler

Diese Modul macht echt Freude! Nachdem ich im Telegram-Chatbot nun ziemlich viel mit Text gearbeitet habe, habe ich just eine Möglichkeit gesucht eine Frage mit einem Plot aus FHEM zu beantworten. Beispielsweise möchte ich auf die Frage "Wie hoch ist der CO2 Gehalt?" die Überblicksgrafik für den aktuellen Tag zugeschickt bekommen. Ging dann eigentlich auch ganz einfach:

im RiveScript-file (habe das File übrigens TALKTOME.rive.cfg genannt, damit ich es einfach mit dem fhem-Editor per "Edit files" bearbeiten kann)

+ wie [hoch] ist [der] co2 [*]
- <call>perl send_plot_telegram SVG_FileLog_NETATMO_CO2</call>


und eine Funktion in 99_myUtils.pm

### Plot per Telegram verschicken
# Beispiel: send_plot_telegram("SVG_FileLog_NETATMO_CO2");
sub send_plot_telegram($) {
my ($plot) = @_;
$plot = "{plotAsPng('".$plot."')}";
TelegramBot_ExecuteCommand($defs{"Telegram.Bot"}, "xxx", $plot);
}

wobei xxx die Telegram Ziel-ID ist.

Dann kommt auf die Frage prompt die Grafik im Chat angesaust. Allerdings kleckert da noch ein "<stream:29805>" hinterher. Kann man das unterdrücken?
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

andreas13

Hallo hartenthaler,

wenn Du Deiner Routine noch ein "return" spendiert, ist die Meldung weg.

Gruß

Andreas
Maintainer des Vitoconnect Moduls
In Betrieb: FritzBox 7590, Homematic
piko Wechelrichter (HTTPMOD). Sonos ....
noch: IT

hartenthaler

ein return; oder ein return ""; verschlimmbessert es leider noch. Dann kommt neben der Grafik noch die anschließende Meldung "TALKTOME: No Answer received - that should not be happening. Check with your admin". Und wie meist bei solchen Meldungen bin ich selbst der unwissende admin ;-)
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

andreas13

Zitat von: hartenthaler am 21 August 2016, 03:16:50
ein return; oder ein return ""; verschlimmbessert es leider noch. Dann kommt neben der Grafik noch die anschließende Meldung "TALKTOME: No Answer received - that should not be happening. Check with your admin". Und wie meist bei solchen Meldungen bin ich selbst der unwissende admin ;-)

Also bei mir geht's. Wie rufst du die Funktion auf?


Gesendet von iPad mit Tapatalk
Maintainer des Vitoconnect Moduls
In Betrieb: FritzBox 7590, Homematic
piko Wechelrichter (HTTPMOD). Sonos ....
noch: IT

andreas13

Moin,

ich liebe dieses Modul! Nur eine Sache bekomme ich nicht hin:

TALKTOUSER_ANDI 0 | | Die Temperatur im Wohnzimmer beträgt 23.0 °C (2016-08-20 14:28:56)

Warum steht vor jeder meiner Antwort meines Bots "TALKTOUSER_ANDI 0 | | "?

Den Bot habe ich eingerichtet:
talktouserModSourceDev %DEVICE%:@%%msgPeerId%%
talktouserMonitorReading msgText


Den Bot in globalMsg eingetragen:
msgContactPush  MeinBot

TALKTOME und TALKTOUSER Devices sind angelegt und soweit ich verstehe auch korrekt.

Ich hätte erwartet, dass "TALKTOUSER_ANDI" durch "@meinBot" ersetzt würde. Habe ich da irgendwas falsch verstanden oder konfiguriert?

Viele Grüße

Andreas

Maintainer des Vitoconnect Moduls
In Betrieb: FritzBox 7590, Homematic
piko Wechelrichter (HTTPMOD). Sonos ....
noch: IT

hartenthaler

Ich habe neben meinem Problem mit dem Senden von Bildern und Dokumenten (dazu morgen mehr) noch ein Problem mit Umlauten, die in einem Reading vorkommen und an den Telegram-Client geschickt werden sollen.

! array termintage   = heute|morgen
! array terminehaben = habe ich|haben wir|stehen|gibt es

+ welche termine (@terminehaben) [im kalender] [für] (@termintage) [im kalender|an]
* <star2> == heute => <call>readingsval cv_KalenderGH sprache_heute Error</call>
* <star2> == morgen => <call>readingsval cv_KalenderGH sprache_morgen Error</call>


Das Reading sprache_heute in meinem Kalender enthält z.B. "Für heute stehen keine Termine im Kalender.". Wenn ich das aber im Dialog - so wie oben zu sehen - mit "Welche Termine habe ich heute" abfrage, dann erhalte ich im Client die Antwort "Für heute stehen keine Termine im Kalender.". Es scheint irgendetwas mit der UTF8-Codierung schief zu gehen. Wenn ich dieses Reading direkt in fhem per Telegram-Modul verschicke, dann landen die Umlaute korrekt beim Client, also müsste es ein Problem im Systemmakro <call>readingsval ...</call> von TALKTOME sein.

Und ja, ich würde den Vorspann vor jeder Antwort (bei mir "TalkToUser_Hermann 0 | | ") auch gerne wegbekommen.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...